2011-06-10 86 views
8

至于我也明白了,querySelector返回一个真正的可变因素,而querySelectorAll返回非现场静态节点集。querySelectorAll:操作节点

我想调整安装到特定选择的所有元素的风格。它工作正常的第一要素与querySelector,但不是与querySelectorAll所有匹配的元素。我想这是因为节点集是非活的。

是否有解决方法?或者我错过了什么?

回答

9

的问题是,querySelector返回单个节点。 querySelectorAll返回一组节点(活跃性意味着如果更新它们,组合中的元素将不会被删除)。你需要在每个匹配的元素上设置一个样式,可能会有一个循环 - 你不能只为它们设置一个属性。

所以,你可能需要做这样的事情:

var nodes = document.querySelectorAll('div.foo'); 
for (var i = 0; i < nodes.length; i++) { 
    nodes[i].style.color = 'blue'; 
} 
+0

非常感谢!我尝试过,但它不起作用,所以我认为这是由于nodeset没有生效。但实际上我刚才忘了初始化迭代器(= 0)... – fabb 2011-06-11 09:28:48

5

这也将工作..

[].forEach.call(document.querySelectorAll('div.foo'), function (el) { 
    el.style.color = 'blue'; 
}); 
+0

它让我感兴趣的是,以上的作品,但'document.querySelectorAll(“div.foo”)的forEach(函数(E1)...'没有按“T工作的任何想法,为什么 – 2015-01-29 03:51:38

+1

querySelectorAll返回一个节点列表,它不具有的forEach参见:?https://developer.mozilla.org/en-US/docs/Web/API/NodeList#Why_is_NodeList_not_an_Array.3F – seans 2015-02-24 15:44:01

1

querySelectorAll: manipulating nodes但有办法描述,使其工作,因为forEach只适用于阵列,不适用于NodeLists:

Array.prototype.slice.call(document.querySelectorAll('div.foo')).forEach(function(el) { 
    el.style.color = 'blue'; 
});