• JavaScript判断IE各版本完美解决方案


    解决方案

    IE知道自身毛病很多,于是提供的一套官方的HTML hack方式:

    <!--[if IE]>
    // 全部IE版本可见
    <![endif]-->
    <!--[if IE 6]>
    // IE6可见
    <![endif]-->
    

    依次等等。
    这样的写法在其它浏览器里,完全就是一坨注释而直接遭到无视,但在IE里却不会。IE会分析里面的提到的版本号,并根据版本号确定要不要解析里面的DOM元素和文本内容。等一下!DOM元素?那岂不是可以使用js来获取里面的DOM元素?反正谁看到了,谁就是IE!于是,国外大神就有了下面的写法:

    var isIE = function(){
        var b = document.createElement('b')
        b.innerHTML = '<!--[if IE]><i></i><![endif]-->'
        return b.getElementsByTagName('i').length === 1
    }

    这也太巧妙了!首先生成了一个b元素,设置它的innerHTML为一坨只有IE才认识的注释,注释里只有一个空的标签,然后读取里面的出现的元素i的个数是不是等于1,是不是等于1,是不是等于1。。。。
    在大苹果看来,这样的写法比其它任何一种都要好。至于为什么生成一个b元素并且里面写一个i元素而不是div或者strong,更多是考虑到前者字节量更小。
    检测各个IE版本的方法也就顺理成章了:

    var isIE6 = function(){
        var b = document.createElement('b')
        b.innerHTML = '<!--[if IE 6]><i></i><![endif]-->'
        return b.getElementsByTagName('i').length === 1
    }
    // var isIE7
    // ...

    更进一步

    在苹果看来,还可以进一步将版本号提取成参数,就能生成一个通用的检测IE版本的函数了:

    var isIE = function(ver){
        var b = document.createElement('b')
        b.innerHTML = '<!--[if IE ' + ver + ']><i></i><![endif]-->'
        return b.getElementsByTagName('i').length === 1
    }
    if(isIE(6)){
        // IE 6
    }
    // ...
    if(isIE(9)){
        // IE 9
    }

    这样想检测哪个版本都毫无压力。但是,如果只想检测是不是IE,而不关心浏览器版本,那只需要在调用函数的时候,不传递参数即可。

    var ie  = isIE()
  • 相关阅读:
    我的软考之路
    VB成员函数集锦
    关于软件维护问题的几点思考
    element样式调整用到的东西
    JS实现旋转的魔方
    关于echarts 重绘/图表切换/数据清空
    CSS3 @keyframes 实现匀速旋转魔方(搬运工)
    在vue的js文件引入自定义js文件
    记录 vue+element树节点的标注
    echarts 设置图例文本不可点击
  • 原文地址:https://www.cnblogs.com/imsomnus/p/5105621.html
Copyright © 2020-2023  润新知