js document.getElementsByClassName的使用介绍与自定义函数
投稿:mdxy-dxy
今天在增加一个功能的时候需要用到getElementsByClassName(),getElementsByClassName但是HTML5 新增的DOM API。IE8以下不支持,那么就需要下面的方法解决了
getElementsByClassName()是HTML5 新增的DOM API。IE8以下不支持搜索。
getElementByClassName()函数的使用方法:
使用JavaScript访问DOM的一个重大问题是,此过程需要一种通过元素类名称来选择类的类函数,对DOMContentReady,这种类函数的缺失导致开发人员需要自己编写自定义脚本业执行上述任务,许多这个类脚本都是围绕着getElementByClassName()建立的,这种解决方法在HTML5中被标准化,另外,这种方法还本地存在于现代浏览器中,GetElementByClassName()只使用一个字符串值作为输入.并返回一个Nodelist,这个NodeList包含所有类名称匹配这个字符串值的元素:
var el = document.getElementsByClassName('foo');
通过在字符串中使用空格分隔类,也可以匹配多个类,下面的代码挑选出了所有既拥有foo类名称又拥有bar类名称的元素:
var el = document.getElementsByClassName('foo bar');
W3C没有getElementByClassName这个函数,我们可以自己定义一个函数来模拟它。
一般如下几种方法:
1、要不就是使用jquery来实现
2、通过自定义函数解决
class单个时 如class="test"
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; }
代码二、
function getElementsByClassName(className,parent){ var oParent=parent?document.getElementById("parent"):document; var oLis=oParent.getElementsByTagName("*"); var arr=[]; for(var i=0;i<oLis.length;i++){ if(oLis[i].className==className){ arr.push(oLis[i]) }; return arr; } };
class有多个的时候同样匹配,如class="test1 test2 test3"
function getElementsByClassName (className) { var all = document.all ? document.all : document.getElementsByTagName('*'); var elements = new Array(); for (var e = 0; e < all.length; e++) { var classList = all[e].className.split(" "); for(var i=0;i<classList.length;i++){ if (classList[i] == className) { elements[elements.length] = all[e]; break; } } } return elements; }
下面再附一个完整的测试代码:
<!DOCTYPE html> <html> <head> <meta charset='UTF-8' /> <script> /*JS写getElementByClassName; 我发现chorm、firefox、ie都支持document.getElementsByClassName */ window.onload = function(){ var adom = document.getElementsByClassName('a1'); for(var i = 0;i<adom.length;i++) adom[i].style.backgroundColor="red"; }; function getElementByClassName(className){ var elems = []; if(!document.getElementsByClassName){ alert("no exit"); var dom = document.getElementByTagName('*'); for(var i = 0;i<dom.length;i++){ if(dom[i].className == className) elems.push(dom[i]); } }else{ elems = document.getElementsByClassName(className); alert('exit'); } return elems; } </script> </head> <body> <div id="a1">a1</div> <div class="a1">a1</div> <div class="a1">a1</div> <div id="a1">a1</div> <div class="a1">a1</div> </body> </html>
效果如图所示: