JavaScript判断IE各版本完美解决方案
2016-01-06 14:55
507 查看
解决方案
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()
相关文章推荐
- js的早绑定和晚绑定
- js document.all的用法
- JS相关
- json.dumps错误:'utf8' codec can't decode byte解决方案
- Xsoup 是一款基于 Jsoup 开发的
- Xsoup 是一款基于 Jsoup 开发的
- JSONP原理及实现
- js获取某个标签中的信息
- 莱鸟介绍javascript onclick事件
- C#解析json文件的方法
- 【虫师--系列10】cookie、session、sessionid 与jsessionid
- JSP浏览商品信息项目学习笔记
- JavaScript基础–作用域
- JavaScript基本概念(三)--- 数据类型
- JavaScript实现点击按钮直接打印
- JSP 用JS弹出确认删除对话框
- js中哈希表的几种用法总结
- JS代码大全(都是网上看到自己整理的)
- [html][javascript]父子窗体传值
- javascript中加var和不加var的区别 你真的懂吗