2010-04-02 77 views
3

爲什麼當我寫getElementByClass()的setAttribute不起作用

document.getElementByClass('home1').setAttribute('style', 'background-image:url(img/red_menu.PNG);'); 

它不工作? 我有class="home1"

元素與document.getElementById('home1')... 工作正常 感謝

+0

重新編輯,當我編輯我的答案時,您一定會這樣做,以警告您它返回的是NodeList,而不是元素(因爲它可以匹配多個元素!)。如果你閱讀鏈接文檔,你會更清楚它的功能。另外,如果您使用的是IE瀏覽器,則無法正常工作。 – 2010-04-02 09:31:32

+0

@ T.J。克勞德好,謝謝。我會讀它,但你現在可以說我爲什麼不能setattribue所有的NodeList? – Simon 2010-04-02 09:33:52

+0

因爲DOM沒有定義這種元操作(允許您調用列表上的函數並將其應用於列表中的每個元素)。我想你會喜歡jQuery,它就是這樣的元操作。值得一看。 – 2010-04-02 09:36:47

回答

11

getElementsByClassName,不getElementByClass; details here。請注意,IE確實是not support this function(還)。

getElementsByClassName返回匹配元素(而不是單個元素)的節點列表,所以:

var list, index; 
list = document.getElementsByClassName("home1"); 
for (index = 0; index < list.length; ++index) { 
    list[index].setAttribute(/* ... */); 
} 

對於這樣的事情,你可能需要使用圖書館像jQueryPrototypeGoogle Closure等。 ,爲您鋪平各種瀏覽器差異。與自己處理這些差異相比,它們可以爲您節省時間和麻煩的批次

舉例來說,在jQuery的:

$(".home1").attr(/* ... */); 

...應用於的屬性(通過jQuery#attr)與類 「和home1」 每個元素。雖然在你的特定情況下,你可能會想要jQuery#css