Spec-Zone.ru › Web APIs

NodeList

Базовая поддержка Широко доступно

Эта функция хорошо отработана и работает на многих устройствах и версиях браузеров. Она доступна во всех браузерах с июля 2015 года.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

NodeList — это коллекции узлов, обычно возвращаемые такими свойствами, как Node.childNodes, и методами, такими как document.querySelectorAll().

Этот интерфейс был попыткой создать неизменяемый список и продолжает поддерживаться только для того, чтобы не сломать код, который его уже использует. Современные API представляют структуры списков с помощью типов, основанных на JavaScript-массивах, что делает доступными многие методы массивов и в то же время накладывает дополнительные семантические ограничения на их использование (например, делает их элементы неизменяемыми).

Эти исторические причины не означают, что вам, как разработчику, следует избегать NodeList. Вы сами не создаёте NodeList объекты, но получаете их из API, таких как Document.querySelectorAll(), и эти API не устарели. Однако будьте внимательны к семантическим различиям от реального массива.

Хотя NodeList не является Array, можно перебирать его с помощью forEach(). Его также можно преобразовать в настоящий Array с помощью Array.from().

Живые и статические списки узлов

Хотя оба считаются NodeList объектами, существуют два типа списков узлов: живые и статические.

Живые списки узлов

В некоторых случаях NodeList является живым, что означает, что изменения в DOM автоматически обновляют коллекцию.

Например, Node.childNodes является живым:

const parent = document.getElementById("parent");
let childNodes = parent.childNodes;
console.log(childNodes.length); // let's assume "2"
parent.appendChild(document.createElement("div"));
console.log(childNodes.length); // outputs "3"

Статические списки узлов

В других случаях NodeList является статическим, где любые изменения в DOM не влияют на содержимое коллекции. Универсальный метод document.querySelectorAll() возвращает статический NodeList.

Важно помнить об этом различии, когда вы выбираете способ перебора элементов в NodeList, и следует ли кэшировать length списка.

Свойства экземпляра

NodeList.length Только для чтения

Количество узлов в NodeList.

Методы экземпляра

NodeList.item()

Возвращает элемент в списке по его индексу или null , если индекс вне границ.

Альтернатива доступу к nodeList[i] (которая вместо этого возвращает undefined , если i находится вне границ). Это полезно в основном для не-JavaScript реализаций DOM.

NodeList.entries()

Возвращает iterator, позволяющий коду пройтись по всем парам ключ/значение, содержащимся в коллекции. (В данном случае ключи — целые числа, начинающиеся с 0, а значения — узлы.)

NodeList.forEach()

Выполняет предоставленную функцию один раз для каждого элемента NodeList , передавая элемент в качестве аргумента функции.

NodeList.keys()

Возвращает iterator, позволяющий коду пройтись по всем ключам пар ключ/значение, содержащимся в коллекции. (В данном случае ключи — целые числа, начинающиеся с 0.)

NodeList.values()

Возвращает iterator, позволяющий коду пройтись по всем значениям (узлам) пар ключ/значение, содержащимся в коллекции.

Пример

Можно перебрать элементы в NodeList с помощью цикла for:

for (let i = 0; i < myNodeList.length; i++) {
  let item = myNodeList[i];
}

Не используйте for...in для перечисления элементов в NodeList, так как они также перечисляют его свойства length и item и вызовут ошибки, если ваш скрипт предполагает, что он имеет дело только с объектами element. Кроме того, for...in не гарантируется, что он будет посещать свойства в определённом порядке.

for...of циклы правильно перебирают NodeList объекты:

const list = document.querySelectorAll("input[type=checkbox]");
for (const checkbox of list) {
  checkbox.checked = true;
}

Браузеры также поддерживают метод итератора (forEach()), а также entries(), values() и keys().

Спецификации

Спецификация
DOM
# interface-nodelist

Совместимость с браузерами

Рабочие столы Мобильные
Chrome Edge Firefox Opera Safari Chrome Android Firefox for Android Opera Android Safari на iOS Samsung Internet WebView Android
@@iterator 51 79 36 38 10 51 36 41 10 5.0 51
NodeList 1 12 1 8 1 18 4 10.1 1 1.0 4.4
entries 51 16 50 38 10 51 50 41 10 5.0 51
forEach 51 16 50 38 10 51 50 41 10 5.0 51
item 1 12 1 ≤12.1 1 18 4 ≤12.1 1 1.0 4.4
keys 51 16 50 38 10 51 50 41 10 5.0 51
length 1 12 1 ≤12.1 1 18 4 ≤12.1 1 1.0 4.4
values 51 16 50 38 10 51 50 41 10 5.0 51

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/NodeList

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API