2010-04-02 76 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