JS中兼容各瀏覽器通過ClassName獲取元素


核心代碼

function getByClass(sClass,oParent){ 
//考慮到會有從某個父元素中獲取 有className名的元素 的情況(如下示例'aaa');
//所以傳入第二個參數為父元素,先做一個判斷,不傳參數的話默認為document是更為常用的情況 var Parent = oParent || document;
//先獲取所有的子元素 var oEle = Parent.getElementsByTagName('*');
//聲明一個空數組用來存放獲取到的元素 var newArr=[];
//如果是常規瀏覽器,document.getelementsByClassName方法為true,則直接使用 if(Parent.getElementsByClassName){ return Parent.getElementsByClassName(sClass);
//沒有這種方法的話,則需要拿到所有的子元素,再做判斷 }else{
//遍歷所有的子元素,得到所有的className; for(var i=0;i<oEle.length;i++){
//將得到的 className 用數組保存 var cn = oEle[i].className; var arr = cn.split(" ");
//遍歷得到的className,做判斷
//需要注意的是,避免使用indexOf方法,原因:比如取test1,含有testtest1這個類名的元素也將被取到

//將含有className的元素放入新數組
for(var j=0;j<arr.length;j++){ if(arr[j] == sClass){ newArr.push(oEle[i]); break; } } } return newArr; } }

 

 測試如下

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1.0">
 6     <meta http-equiv="X-UA-Compatible" content="ie=edge">
 7     <title>Document</title>
 8 </head>
 9 <body>
10     <div id="aaa">
11         <div class="bbb">
12 
13         </div>
14     </div>
15     <div class="bbb">
16 
17     </div>
18     <div class="bbb">
19 
20     </div>
21     <script>
22 
23 function getByClass(sClass,oParent){
24 
25      var Parent = oParent || document;
26 
27      var oEle = Parent.getElementsByTagName('*');
28 
29      var newArr=[];
30 
31      if(Parent.getElementsByClassName){
32 
33        return Parent.getElementsByClassName(sClass);
34 
35      }else{
36  
37       for(var i=0;i<oEle.length;i++){
38 
39          var cn = oEle[i].className;
40 
41          var arr = cn.split(" ");
42 
43                   for(var j=0;j<arr.length;j++){
44 
45                       if(arr[j] == sClass){
46  
47                           newArr.push(oEle[i]);
48  
49                           break; 
50 
51                       }  
52                   }   
53             }
54                 return newArr;
55         }
56     } 
57 
58 //獲取ID為'aaa'的div中class為'bbb'的元素
59 var a = document.getElementById('aaa');
60 var cd = getByClass('bbb',a);
61 console.log(cd);//Array[div.bbb]
62     </script>
63 
64 </body>
65 </html>

 

 

 總結:考慮到有從父元素直接獲取子元素的情況,所以把document修改成了父元素,並且不傳參數的話父元素默認為document

   在獲取className的元素的時候,會有兩個class名的情況,這時候之前的代碼就會出現不適用的情況,所以做出修改,即再加一層判斷(詳見注釋處)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM