Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. Интерфейсы веб API
  3. NodeList

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

NodeList

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since ⁨июль 2015 г.⁩.

ОбъектNodeList — это коллекция узлов, возвращаемая такими методами, какNode.childNodes иdocument.querySelectorAll.

Примечание:Несмотря на то, чтоNodeList не является массивом (Array ), его вполне возможно перебрать при помощи метода forEach(). NodeList также можно конвертировать вArray при помощиArray.from()

Однако некоторые старые браузеры на данный момент все ещё не поддерживаютNodeList.forEach() илиArray.from(). Данные ограничения можно обойти, используяArray.prototype.forEach() ( больше информации на этой странице ).

Свойства

length

Количество элементов в NodeList.

Методы

item (index)

Возвращает элемент из списка по его индексу илиnull, если индекс выходит за границы допустимого диапазона. В качестве альтернативы этого метода может быть использованnodeList[index], возвращающийundefined при недопустимомindex.

entries()

Возвращаетiterator, позволяя перебрать все пары ключ/значение, содержащиеся в объекте.

forEach()

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

keys()

Возвращаетiterator, позволяя перебрать все ключи каждой пары ключ/значение, содержащейся в объекте.

values()

Возвращаетiterator, позволяя перебрать все значения каждой пары ключ/значение, содержащейся в объекте.

Описание

Динамическая коллекция

В определённых случаяхNodeList может являтьсядинамической коллекцией. Это означает, что любые изменения в DOM тут же отражаются на коллекции. Примером подобной коллекции являетсяNode.childNodes:

js
const parent = document.getElementById("parent");const childNodes = parent.childNodes;console.log(childNodes.length); // пусть равно "2"parent.appendChild(document.createElement("div")); // добавляем новый divconsole.log(childNodes.length); // выведет "3"

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

Данное деление необходимо иметь в виду при выборе способа обхода элементовNodeList, а также сохранении длины списка в переменную.

ОтличияNodeList отArray

NodeList используется подобно массивам, и потому может возникнуть закономерное желание использовать в нём методы, предоставляемыеArray.prototype. ОднакоNodeList не реализует методы, подобные таковым уArray.

В JavaScript существует механизм наследования, основанный на прототипах, применяемый как к встроенным («native») (таким какArray), так и «host»-объектам, предоставляемым средой исполнения (таким какNodeList) . Экземпляры классаArray получают свои методы (к примеру,forEach иmap) из следующей цепочки наследования:

myArray --> Array.prototype --> Object.prototype --> null (Цепочка прототипов объекта может быть получена рекурсивным вызовом Object.getPrototypeOf)

forEach,map, ровно как и все остальные свойства принадлежатArray.prototype.

Цепочка же прототиповNodeList выглядит следующим образом:

myNodeList --> NodeList.prototype --> Object.prototype --> null

NodeList.prototype содержит методыforEach,item, но никак не остальные методыArray.prototype, поэтому они и не могут быть использованы сNodeLists.

Пример

Элементы вNodeList, можно обработать следующим образом:

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

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

Циклыfor...of корректно перечисляют все объекты внутриNodeList :

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

КонвертированиеNodeList вArray

Иногда удобнее работать с содержимымNodeList, используя методыArray. Ниже приведены способы преобразованияNodeList кArray:

js
const list = document.querySelectorAll("div"); // возвращает NodeListconst array1 = Array.from(list); // преобразует NodeList в Arrayconst array2 = [...list]; // преобразует NodeList в Array

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

Specification
DOM
# interface-nodelist

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

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp