關於 XX.getElementsByTagName('*')的困擾和解決辦法


在學習Javascript的dom階段,為了加深對節點的理解,方便日后使用,封裝了一下獲得classname函數,具體如下:

 1    <script>
 2         function getByClass(Parent, sClass) {
 3             var aEle = Parent.getElementsByTagName('*');
 4             var aReturn = [];
 5             for (var i = 0; i < aEle.length; i++) {
 6                 if (aEle[i].className == sClass) {
 7                     aReturn.push(aEle[i]);
 8                 }
 9             }
10             return aReturn;
11         };
12         window.onload = function () {
13             var aUl = document.getElementsByTagName('ul');
14             var aLi = getByClass(aUl, 'box');
15             alert(aLi.length);
16             for (var i = 0; i < aLi.length; i++) {
17                 aLi[i].style.background = 'red';
18             }
19         };
20     </script>
21 </head>
22 
23 <body>
24     <ul>
25         <li class="box">1</li>
26         <li class="box">1</li>
27         <li></li>
28         <li></li>
29         <li class="box">1</li>
30     </ul>
31 </body>

發現第三行始終報錯:Uncaught TypeError: Parent.getElementsByTagName is not a function

多方測試,發現所有元素獲取都正常,形參Parent得到的也是aUl,在網上搜索解決辦法也遲遲未果,我便開始了如下嘗試:

首先我判斷應該是Parent處出現了問題,那么我在13行下加了一行:

var a = document.getElementsByTagName('ul').getElementsByTagName('*');

同樣顯示報錯,所以問題出在了這個getElementsByTagName上。

實際上document.getElementsByTagName()雖然數量是1,但是同樣是個數組。

getElementsByTagName()方法的操作對象是一個確定唯一的元素,因此不滿足。

將3行改為  var aEle = Parent(0).getElementsByTagName('*'); 即可。

ps:

在獲得元素后,可用innerHtml獲取和修改元素。


免責聲明!

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



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