[JavaScript]兼容IE6/7的getElementByClassName
在使用原生JavaScript时,获取类选择符时,即使用getElementByClassName,它在Firefox和IE下是不能兼容。
Firefox下是可以用它获取的到元素而IE不行,一般框架都会实现该方法,达到在IE和Firefox下兼容的问题。
- function getByClassName(className){
- if(document.getElementByClassName){
- return document.getElementByClassName(className) //FF下因为有此方法,所以可以直接获取到;
- }
- var nodes=document.getElementsByTagName("*");//获取页面里所有元素,因为他会匹配全页面元素,所以性能上有缺陷,但是可以约束他的搜索范围;
- var arr=[];//用来保存符合的className;
- for(var i=0;i<nodes.length;i++){
- if(hasClass(nodes[i],className)) arr.push(nodes[i]);
- }
- return arr;
- }
- function hasClass(node,className){
- var cNames=node.className.split(/\s+/);//根据空格来分割node里的元素;
- for(var i=0;i<cNames.length;i++){
- if(cNames[i]==className) return true;
- }
- return false;
- }
另从网上看到一种解决的办法:
由于IE4之后对 document.all 都有支持,所以可以简单的利用是否支持 document.all判断是否为IE。
如果不是IE,则用W3C DOM的document.getElementByTagName('*')取代all
- function getElementsByClassName (className) {
- var all = document.all ? document.all : document.getElementsByTagName('*');
- var elements = new Array();
- for (var e = 0; e < all.length; e++) {
- if (all[e].className == className) {
- elements[elements.length] = all[e];
- break;
- }
- }
- return elements;
- }
参考:http://www.cnblogs.com/oomusou/archive/2008/05/19/1202296.html

浙公网安备 33010602011771号