A node
es el nombre genérico para cualquier tipo de objeto en la jerarquía DOM. Un node
podría ser uno de los elementos DOM integrados como document
o document.body
, podría ser una etiqueta HTML especificada en el HTML como <input>
o <p>
o podría ser un nodo de texto creado por el sistema para contener un bloque de texto dentro de otro elemento. Entonces, en pocas palabras, un node
es cualquier objeto DOM.
Un element
es un tipo específico de node
ya que hay muchos otros tipos de nodos (nodos de texto, nodos de comentario, nodos de documento, etc.).
El DOM consta de una jerarquía de nodos donde cada nodo puede tener un elemento principal, una lista de nodos secundarios y nextSibling y previousSibling. Esa estructura forma una jerarquía de árbol. El nodo document
tendría su lista de nodos secundarios (el nodo head
y el nodo body
). El nodo body
tendría su lista de nodos secundarios (los elementos de nivel superior en su página HTML) y así sucesivamente.
Por lo tanto, un nodeList
es simplemente una lista tipo array de nodes
.
Un elemento es un tipo específico de nodo, uno que se puede especificar directamente en el HTML con una etiqueta HTML y puede tener propiedades como id
o class
. puede tener hijos, etc ... Hay otros tipos de nodos como nodos de comentarios, nodos de texto, etc. con diferentes características. Cada nodo tiene una propiedad .nodeType
que informa qué tipo de nodo es. Se puede ver los diversos tipos de nodos aquí (diagrama de MDN):

se puede ver un ELEMENT_NODE
es un tipo particular de nodo en el que la propiedad nodeType
tiene un valor de 1
.
Así que document.getElementById("test")
solo puede devolver un nodo y se garantiza que será un elemento (un tipo específico de nodo). Por eso solo devuelve el elemento en lugar de una lista.
Dado que document.getElementsByClassName("para")
puede devolver más de un objeto, los diseñadores optaron por devolver un nodeList
porque ese es el tipo de datos que crearon para una lista de más de un nodo. Como estos solo pueden ser elementos (solo los elementos suelen tener un nombre de clase), técnicamente es nodeList
que solo tiene nodos de tipo elemento y los diseñadores podrían haber creado una colección de nombre diferente que fuera elementList
, pero eligieron usar solo un tipo de colección si solo tenía elementos o no.
EDIT: HTML5 define una HTMLCollection
que es una lista de elementos HTML (no cualquier nodo, sólo los elementos). Varias propiedades o métodos en HTML5 ahora devuelven HTMLCollection
. Si bien es muy similar en la interfaz a un nodeList
, ahora se hace una distinción en el sentido de que solo contiene elementos, no ningún tipo de nodo.
La distinción entre nodeList
y HTMLCollection
tiene poco impacto en cómo se usa (por lo que puedo decir), pero los diseñadores de HTML5 ahora han hecho esa distinción.
Por ejemplo, la propiedad element.children
devuelve una HTMLCollection en vivo.
Hay 12 tipos de nodos, siendo el elemento uno de ellos – Esailija
¿no son todos estos 12 tipos objetos también? como 1 = ELEMENT_NODE, 3 = TEXT_NODE, creo que ambos son también objetos Element. –
No, no lo son. Elemento es solo un tipo de nodo. – Esailija