(原創) 如何實現getElementByClassName()? (Web) (JavaScript)

來源:互聯網
上載者:User

Abstract
W3C DOM並沒有制定document.getElementByClassName(),但有時候沒ID,而只有class name可抓時該怎麼辦?

Introduction
對Blog做改造時,常會遇到根本沒有ID可抓,而只有class可抓,但很遺憾W3C DOM並沒有document.getElementByClassName(),以下JavaScript可以模擬getElementByClassName()。

JavaScript / getElementByClassName

 1 function getElementsByClassName (className) {
 2   var all = document.all ? document.all : document.getElementsByTagName('*');
 3   var elements = new Array();
 4   for (var e = 0; e < all.length; e++) {
 5     if (all[e].className == className) {
 6       elements[elements.length] = all[e];
 7       break;
 8     }
 9   }
10   return elements;
11 }
12 

2行

var all = document.all ? document.all : document.getElementsByTagName('*');

document.all為IE4的DHTML的獨門絕技,IE4之後接有支援,所以可以簡單的利用是否有支援document.all判斷是否為IE,若不是IE,則用W3C DOM的document.getElementByTagName('*')取代all,所以這個方式在IE或FireFox皆能使用。

4行 ~ 9行

for (var e = 0; e < all.length; e++) {
  if (all[e].className == className) {
    elements[elements.length] = all[e];
    break;
  }
}

利用迴圈一個tag一個tag判斷其class name實否符合條件,找到第一個符合條件就跳出迴圈,如此就能找到第一個符合class name的tag。

Conclusion
我在標題加上Google Adsense link就是用這種方法,因為沒ID可用,只好找class name,至於加入的方式,請參考(原創) 如何在Blog內任意處動態產生Google AdSense廣告? (Web) (CSS) (JavaScript)。

See Also
(原創) 如何在Blog內任意處動態產生Google AdSense廣告? (Web) (CSS) (JavaScript)
(原創) 為什麼W3C DOM不提供insertAfter? (Web) (JavaScript)

Reference
超苦的Ga的getElementByClassName

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.