A node
- это общее имя для любого типа объекта в иерархии DOM. A node
может быть одним из встроенных элементов DOM, таких как document
или document.body
, это может быть тег HTML, указанный в HTML, такой как <input>
или, <p>
или это может быть текстовый узел, который создается системой для хранения блока текста внутри другого элемента. , Итак, в двух словах, это node
любой объект DOM.
Это element
один конкретный тип, node
поскольку существует много других типов узлов (текстовые узлы, узлы комментариев, узлы документов и т. Д.).
DOM состоит из иерархии узлов, где каждый узел может иметь родителя, список дочерних узлов, а также nextSibling и previousSibling. Эта структура образует древовидную иерархию. У document
узла будет свой список дочерних узлов ( head
узел и body
узел). У body
узла будет свой список дочерних узлов (элементов верхнего уровня на вашей HTML-странице) и так далее.
Итак, a nodeList
- это просто список, похожий на массив nodes
.
Элемент - это определенный тип узла, который может быть непосредственно указан в HTML с помощью тега HTML и может иметь свойства, такие как id
или class
. может иметь детей и т. д. Существуют другие типы узлов, такие как узлы комментариев, текстовые узлы и т. д. с другими характеристиками. У каждого узла есть свойство, .nodeType
которое сообщает, какой это тип узла. Вы можете увидеть различные типы узлов здесь (диаграмма из MDN ):
Вы можете видеть, что ELEMENT_NODE
это один конкретный тип узла, где nodeType
свойство имеет значение 1
.
Таким образом, document.getElementById("test")
можно вернуть только один узел, и он гарантированно будет элементом (узлом определенного типа). Из-за этого он просто возвращает элемент, а не список.
Поскольку document.getElementsByClassName("para")
может возвращать более одного объекта, дизайнеры решили вернуть a, nodeList
потому что это тип данных, который они создали для списка из более чем одного узла. Так как это могут быть только элементы (только элементы обычно имеют имя класса), технически он nodeList
имеет только узлы типа элемента в нем, и дизайнеры могли создать коллекцию с другим именем, которая была elementList
, но они решили использовать только один тип коллекции, имеет ли она только элементы или нет.
РЕДАКТИРОВАТЬ: HTML5 определяет, HTMLCollection
который является списком элементов HTML (не любой узел, только элементы). Ряд свойств или методов в HTML5 теперь возвращают HTMLCollection
. Хотя он очень похож по интерфейсу на a nodeList
, теперь делается различие в том, что он содержит только элементы, а не какой-либо тип узла.
Различие между a nodeList
и an HTMLCollection
мало влияет на то, как вы его используете (насколько я могу судить), но разработчики HTML5 уже сделали это различие.
Например, element.children
свойство возвращает активную коллекцию HTMLCollection.