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.