Кратко
СкопированоHTML и Node — это очень похожие на массив коллекции. Они хранят элементы веб-страницы (узлы DOM). Node может хранить любые типы узлов, а HTML — только узлы HTML-элементов. К элементам коллекций можно обращаться по индексу, но у них нет привычных методов массива.
HTML возвращает методы get и get.
Node возвращает метод query и свойство child.
Полный список всех методов, возвращающих типы Node или HTML, найдёте в стандарте DOM.
Как понять
СкопированоHTML возвращают методы, которые работают с DOM — представлением HTML-кода страницы в JavaScript.
Полученная один раз коллекция всегда остаётся актуальной. JavaScript будет обновлять её в случае, если на странице появляется подходящий элемент. Поэтому HTML называют «живой» коллекцией.
Например, единожды получив коллекцию, можем не заботиться о её поддержке:
Node работает почти так же, как и HTML.
Разница:
Nodeхранит любые типы узлов, например, текстовые узлы и комментарии, аList HTML— только узлы HTML-элементов.Collection HTMLпозволяет обращаться к элементам не только по индексу, но и по имени, с помощью методаCollection named.Item Nodeможет быть не только «живой» коллекцией, но и статической. Такая коллекция не обновляется при появлении на странице новых элементов.List
«Живой» Node возвращают метод get и свойство child.
Статический Node возвращает метод query.
На практике
Скопированосоветует
Скопировано🛠 Используйте индексы для получения отдельных элементов коллекции:
const paragraphs = document.getElementsByTagName('p')console.log(paragraphs[0])
const paragraphs = document.getElementsByTagName('p')
console.log(paragraphs[0])
🛠 Если нужно обойти все элементы в цикле, можно написать классический цикл for:
const paragraphs = document.getElementsByTagName('p')for (let i = 0; i < paragraphs.length; ++i) { console.log(paragraphs[i].id) // Печатаем значение атрибута id элемента}
const paragraphs = document.getElementsByTagName('p')
for (let i = 0; i < paragraphs.length; ++i) {
console.log(paragraphs[i].id)
// Печатаем значение атрибута id элемента
}
Другой вариант — воспользоваться синтаксисом for:
const paragraphs = document.getElementsByTagName('p')for (let item of paragraphs) { console.log(item.id)}
const paragraphs = document.getElementsByTagName('p')
for (let item of paragraphs) {
console.log(item.id)
}
🛠 При создании цикла над HTML убедитесь, что подходящие элементы не добавляются или удаляются со страницы в момент работы цикла. Так как коллекция живая, её обновление в этот момент приведёт к бесконечному циклу.
🛠 Если нужны методы массива, преобразуйте HTML или Node в массив с помощью Array.
const paragraphs = document.getElementsByTagName('p')let array = Array.from(paragraphs)console.log(array.pop())
const paragraphs = document.getElementsByTagName('p')
let array = Array.from(paragraphs)
console.log(array.pop())