JavaScript. HTMLCollection и NodeList
17.04.2022
Теги: DOM • Frontend • HTML • JavaScript • Web-разработка • Документ • Коллекция
HTMLCollection
и NodeList
— это очень похожие на массив коллекции. Они хранят элементы веб-страницы (узлы DOM). NodeList
может хранить любые типы узлов, а HTMLCollection
— только узлы HTML элементов. К элементам коллекций можно обращаться по индексу, но у них нет привычных методов массива.
HTMLCollection
возвращают методыgetElementsByTagName
,getElementsByClassName
и свойствоchildren
NodeList
возвращают методыquerySelectorAll
,getElementsByName
и свойствоchildNodes
Полученная один раз HTMLCollection
всегда остаётся актуальной — поэтому ее часто называют «живой» коллекцией. Это значит, что JavaScript будет обновлять её в случае, если на странице появляется новый подходящий элемент.
NodeList
может быть не только «живой» коллекцией, но и статической. Такая коллекция не обновляется при появлении на странице новых элементов. «Живой» NodeList
возвращают метод getElementsByName
и свойство childNodes
. Метод querySelectorAll
возвращает статический NodeList
.
Для получения отдельных элементов коллекции можно использовать индексы:
let paragraphs = document.getElementsByTagName('p') console.log(paragraphs[0])
Если нужно обойти все элементы в цикле, то можно написать классический цикл for
или воспользоваться синтаксисом for…of
:
let paragraphs = document.getElementsByTagName('p') for (let i = 0; i < paragraphs.length; ++i) { console.log(paragraphs[i].id) }
let paragraphs = document.getElementsByTagName('p') for (let item of paragraphs) { console.log(item.id) }
HTMLCollection
важно убедиться, что подходящие элементы не добавляются или удаляются со страницы в этот момент. Так как коллекция «живая», её обновление во время цикла может создать бесконечный цикл.
Если очень нужны методы массива, то можно преобразовать HTMLCollection
или NodeList
в массив с помощью Array.from
:
let paragraphs = document.getElementsByTagName('p') let array = Array.from(paragraphs) console.log(array.pop())
Методы HTMLCollection
HTMLCollection.item(index)
. Возвращает узел с порядковым номером index
, отсчёт ведётся от нуля. Возвращает null
, если index
выходит за границы допустимого диапазона.
HTMLCollection.namedItem(name)
. Возвращает узел, идентификатор или имя (в целях совместимости) которого совпадает со строкой, переданной в аргументе. Соответствие имени проверяется в самую последнюю очередь, только для HTML-элементов и только для тех из них, которые поддерживают свойство name
. Возвращает null
, если искомый элемент отсутствует.
Методы NodeList
NodeList.item(index)
. Возвращает элемент из списка по его индексу или null
, если индекс выходит за границы допустимого диапазона. Может быть использован как альтернатива nodeList[index]
, возвращающему undefined
при недопустимом index
.
NodeList.entries()
. Возвращает iterator
, позволяя перебрать все пары ключ/значение, содержащиеся в NodeList
.
NodeList.forEach()
. Выполняет указанную функцию один раз для каждого элемента NodeList
.
NodeList.keys()
. Возвращает iterator
, позволяя перебрать все ключи каждой пары ключ/значение, содержащейся в NodeList
.
NodeList.values()
. Возвращает iterator
, позволяя перебрать все значения каждой пары ключ/значение, содержащейся в NodeList
.
- DOM, часть 3 из 3. Поиск элементов
- DOM, часть 1 из 3. Навигация по элементам
- DOM, часть 4 из 4. Атрибуты и свойства
- DOM, часть 2 из 3. Изменение документа
- Браузерные события, часть 5 из 5. Генерация пользовательских событий
- Браузерные события, часть 4 из 5. Действие браузера по умолчанию
- Браузерные события, часть 3 из 5. Делегирование
Поиск: DOM • Frontend • HTML • JavaScript • Коллекция • Web-разработка • HTMLCollection • NodeList