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()
  • 相关阅读:
    HDU 4611 Balls Rearrangement 数学
    Educational Codeforces Round 11 D. Number of Parallelograms 暴力
    Knockout.Js官网学习(简介)
    Entity Framework 关系约束配置
    Entity Framework Fluent API
    Entity Framework DataAnnotations
    Entity Framework 系统约定配置
    Entity Framework 自动生成CodeFirst代码
    Entity Framework CodeFirst数据迁移
    Entity Framework CodeFirst尝试
  • 原文地址:https://www.cnblogs.com/imsomnus/p/5105621.html
Copyright © 2011-2022 走看看