getElementsByClassName()是HTML5 新增的DOM API。IE8以下不支持
我們知道,原生的方法,是getElementById()和getElementsByTagName(),這兩個不會有兼容問題,但是遇到class的問題還是沒法解決。所以這里總結兩種封裝方法,可以用它們來獲取指定的class元素。當然,對於現代瀏覽器開發,還可以使用querySelector()和querySelectorAll(),他們的功能更加強大。
1.數組遍歷的方法:
1 function getByClass(sClass,oParent){ 2 3 var parent = oParent || document; 4 var aEles = parent.getElementsByTagName('*'); 5 var arr = []; 6 7 for(var i=0; i<aEles.length; i++){ 8 9 var aClass = aEles[i].className.split(' '); 10 11 for(var j=0; j<aClass.length; j++){ 12 if(aClass[j] == sClass){ 13 14 arr.push(aEles[i]); 15 16 } 17 } 18 } 19 return arr; 20 }
2.正則匹配的方法
1 function getElementsByClassName(oParent, sClass){ 2 var aEle = oParent.getElemnetsByTagName('*'); 3 var result = []; 4 var re = new RegExp('\\b' + sClass + '\\b', 'i'); 5 6 for(var i=0; i<aEle.length; i++){ 7 if(re.test(aEle[i].className)){ 8 result.push(aEle); 9 } 10 } 11 return result; 12 }
最后,值得一提是,前端頁面實現中,性能的影響往往出現在DOM的操作中。此外,還要注意元素的回流和重繪問題。