js document.getElementsByClassName的使用介绍与自定义函数

简介:

今天在增加一个功能的时候需要用到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"

1
2
3
4
5
6
7
8
9
10
11
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;
          }

代码二、

1
2
3
4
5
6
7
8
9
10
11
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"

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
          }

下面再附一个完整的测试代码:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<!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>

效果如图所示:


本文转自问道博客51CTO博客,原文链接http://blog.51cto.com/450236/1908377如需转载请自行联系原作者

crackernet
相关文章
|
6月前
|
JavaScript 前端开发
JS基本小知识:函数
JS基本小知识:函数
|
7月前
|
JavaScript
js- 函数
js- 函数
|
8月前
|
存储 JavaScript 前端开发
|
9月前
|
JavaScript
js常用的7种函数总结
js常用的7种函数总结
|
11月前
|
JavaScript 前端开发
JS:JS中常见的 “函数名 is not a function” 错误
JS:JS中常见的 “函数名 is not a function” 错误
597 0
|
JSON 自然语言处理 JavaScript
深入理解Js里new Function语法
深入理解Js里new Function语法
|
Web App开发 JavaScript
js中的scrollTop函数
js中的scrollTop函数
1110 0