ie浏览器版本检测新思路

自从html5出来后,大家更加推荐用特性检测而不是浏览器检测。Modernizr便是为此而生。
所以这里的ie浏览器版本检测方式仅作开拓思路用。

var ie = (function(){
    var undef,
        v = 3,
        div = document.createElement('div'),
        all = div.getElementsByTagName('i');
    while (
        div.innerHTML = '<!--[if gt IE ' + (++v) + ']><i></i><![endif]-->',
        all[0]
    );
    return v > 4 ? v : undef;
}());

原理:利用IE特有的条件注释,在循环中当v正确匹配浏览器版本时检测的dom对象才存在。

重点1
关于while中的逗号表达式:
while中如果有多个表达式,以最后一个表达式作为跳出的判断,前面的表达式,不管有多少个,都不会作为跳出的判断,而是执行里面的代码。

var i=2;
while(console.log(i),++i,i==3);
alert(i);

将输出4

重点2
getElementsByTagName的返回值称为LiveNodeList,即该集合会监听DOM的变化而同步更新自己,于是才可以利用all[0]来判断 。

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>