主要使用IE各个阶段实现的一些方法,从中也可以看出IE的发展史。暂时提供到IE4的判定。
var isIE = window.ActiveXObject; var isVersion = document.querySelectorAll ? 8.0 : window.XMLHttpRequest ? 7.0 : document.compatMode ? 6.0 : (0).toFixed ? 5.5 : document.getElementById? 5.0 : document.all ? 4.0 :0;
IE5支持getElementById真是一个伟大的创举。新事物的出现总是引起话题,想起我的javascript启蒙书《Javascript DOM编程艺术》,里面的代码总是少不了判定是否支持getElementById……从此IE5走向辉煌,把网景推向地狱的深渊。IE5发布于1998年9月,从此所有主流浏览器都支持getElementById。
网上找到让IE4支持getElementById的代码,javascript的动态解析立功了。
var ie4=document.all && !document.getElementById; if(ie4) { document.getElementById = new Function('var expr = /^\\w[\\w\\d]*$/, elname=arguments[0]; if(!expr.test(elname)) { return null; } else if(eval("document.all."+elname)) { return eval("document.all."+elname); } else return null;') }
还有getElementsByTagName的实现:
function ie_getElementsByTagName(str) { if (str=="*") return document.all else return document.all.tags(str) } if (document.all) document.getElementsByTagName = ie_getElementsByTagName
很明显如果这些方法得到内置的原生支持,工作效率会大大提升,像jQuery的选择器之于querySelectorAll。IE5可能是当年内置方法与私有实现最多的浏览器,因此它赢得很彻底(抛开捆绑的原因)。内置方法越多,那么对于创建类库的工作就越轻松,从那时开始javascript的类库也多起来了。时至今日,javascript挟以jQuery的东风,越来越受到人重视。加之,西方人对后端javascript的研究,W3C许多惊人的草案的实现,微软加快对标准的支持,谷歌V8的javascript引擎与OS的咄咄逼人,我们一同期待IE9盛世的到来吧。