querySelectorAll: манипулирование узлами - PullRequest
8 голосов
/ 10 июня 2011

Насколько я понял, querySelector возвращает реальный изменяемый элемент, в то время как querySelectorAll возвращает ненасыщенный набор статических узлов.

Я хочу настроить стиль всех элементов в соответствии с конкретнымселектор.Он отлично работает для первого элемента с querySelector, но не для всех соответствующих элементов с querySelectorAll.Я думаю, это потому, что набор узлов не является живым.

Есть ли обходной путь?Или я что-то упустил?

Ответы [ 3 ]

9 голосов
/ 10 июня 2011

Проблема в том, что querySelector возвращает один узел.querySelectorAll возвращает набор узлов (живость означает, что элементы в наборе не будут удалены, если вы обновите их).Вам нужно установить стиль для каждого из элементов, которые соответствуют, возможно, с помощью цикла - вы не можете просто установить свойство один раз для всех них.

Итак, вам, вероятно, нужно сделать что-то вроде этого:

var nodes = document.querySelectorAll('div.foo');
for (var i = 0; i < nodes.length; i++) {
    nodes[i].style.color = 'blue';
}
5 голосов
/ 18 марта 2014

это тоже будет работать ..

[].forEach.call(document.querySelectorAll('div.foo'), function (el) {
    el.style.color = 'blue';
});
1 голос
/ 30 января 2015

Как описано в querySelectorAll: манипулирование узлами , но с возможностью заставить его работать, поскольку forEach работает только с массивами, а не с NodeLists:

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