zoukankan      html  css  js  c++  java
  • 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()
  • 相关阅读:
    递归---Day29
    File类---Day28
    线程池---Day26
    微信公众号运营人员必备的软件工具网站合集
    消息中间件的技术选型心得-RabbitMQ、ActiveMQ和ZeroMQ
    itoa函数的递归实现(二级指针实现)
    二叉树——查找两个任意节点的最近祖先
    C#多线程(二)
    C#多线程(一)
    Websocket协议之php实现
  • 原文地址:https://www.cnblogs.com/imsomnus/p/5105621.html
Copyright © 2011-2022 走看看