getElementsByClassName函数实现获取指定类名的子元素列表

语法如下: var elements = getElementsByClassName(element, names);

使用示例如下:

如果html元素

<div id="example">

  <p id="p1" class="aaa bbb"/>

  <p id="p2" class="aaa ccc"/>

  <p id="p3" class="bbb ccc"/>

</div>

对应的DOM节点为example, 那么

getElementsByClassName(example, “aaa”); 运行结果为包含id为p1, id为p2的元素列表

getElementsByClassName(example, “bbb ccc”);运行结果为包含id为p3的元素列表

getElementsByClassName(example, “ccc bbb”);运行结果为包含id为p3的元素列表

请实现getElementsByClassName方法,要求浏览器兼容。



  1. function getElementsByClassName(element,names){
  2.     var result=[];
  3.     if(element.getElementsByClassName){
  4.         var elements=element.getElementsByClassName(names);
  5.         for(var i=0; i<elements.length; i++){
  6.             var name=elements[i];
  7.             result.push(name);
  8.         }
  9.         return result;
  10.     }else {
  11.         var name=names.split(' ');
  12.         var elements=element.getElementsByTagName('*');
  13.         var patterns=[];
  14.         var current,flag;
  15.         var i=name.length;
  16.         while(--i>=0){
  17.             patterns.push(new RegExp('(^|\s)'+name[i]+'(\s|$)'));
  18.         }
  19.         var j=elements.length;
  20.         while(--j>0){
  21.             current=elements[j];
  22.             flag=false;
  23.             for(var k=0,kl=patterns.length; k<kl; k++){
  24.                 flag = patterns[k].test(current.className);
  25.                 if(!flag) break;
  26.             }
  27.             if(flag) result.push(current);
  28.         }
  29.     }
  30.     return result;
  31. }

发布了22 篇原创文章 · 获赞 22 · 访问量 10万+

猜你喜欢

转载自blog.csdn.net/liang526011569/article/details/53453482
今日推荐