[JavaScript]兼容IE6/7的getElementByClassName

在使用原生JavaScript时,获取类选择符时,即使用getElementByClassName,它在Firefox和IE下是不能兼容。

Firefox下是可以用它获取的到元素而IE不行,一般框架都会实现该方法,达到在IE和Firefox下兼容的问题。

 

 

[javascript] view plain copy
 
  1. function getByClassName(className){    
  2.             if(document.getElementByClassName){    
  3.                 return document.getElementByClassName(className) //FF下因为有此方法,所以可以直接获取到;    
  4.             }    
  5.             var nodes=document.getElementsByTagName("*");//获取页面里所有元素,因为他会匹配全页面元素,所以性能上有缺陷,但是可以约束他的搜索范围;    
  6.             var arr=[];//用来保存符合的className;    
  7.             for(var i=0;i<nodes.length;i++){    
  8.                 if(hasClass(nodes[i],className)) arr.push(nodes[i]);    
  9.             }    
  10.             return arr;    
  11.         }   



 

[javascript] view plain copy
 
  1. function hasClass(node,className){    
  2.             var cNames=node.className.split(/\s+/);//根据空格来分割node里的元素;    
  3.             for(var i=0;i<cNames.length;i++){    
  4.                 if(cNames[i]==className) return true;    
  5.             }    
  6.             return false;    
  7.         }   

 

另从网上看到一种解决的办法:

 

由于IE4之后对 document.all 都有支持,所以可以简单的利用是否支持 document.all判断是否为IE。

如果不是IE,则用W3C DOM的document.getElementByTagName('*')取代all

 

[javascript] view plain copy
 
  1. function getElementsByClassName (className) {  
  2.             var all = document.all ? document.all : document.getElementsByTagName('*');  
  3.             var elements = new Array();  
  4.             for (var e = 0; e < all.length; e++) {  
  5.                 if (all[e].className == className) {  
  6.                     elements[elements.length] = all[e];  
  7.                     break;  
  8.                 }  
  9.             }  
  10.             return elements;  
  11.         }   



 

参考:http://www.cnblogs.com/oomusou/archive/2008/05/19/1202296.html

posted @ 2017-01-16 11:23  天涯海角路  阅读(179)  评论(0)    收藏  举报