A node
es el nombre genérico para cualquier tipo de objeto en la jerarquía DOM. A 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>
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, a node
es cualquier objeto DOM.
Un element
es un tipo específico node
ya que hay muchos otros tipos de nodos (nodos de texto, nodos de comentarios, nodos de documentos, etc.).
El DOM consiste en una jerarquía de nodos donde cada nodo puede tener un padre, una lista de nodos hijos y un nextSibling y previousSibling. Esa estructura forma una jerarquía en forma de árbol. El document
nodo tendría su lista de nodos secundarios (el head
nodo y el body
nodo). El body
nodo tendría su lista de nodos secundarios (los elementos de nivel superior en su página HTML) y así sucesivamente.
Entonces, a nodeList
es simplemente una lista tipo matriz nodes
.
Un elemento es un tipo específico de nodo, uno que puede especificarse directamente en el HTML con una etiqueta HTML y puede tener propiedades como an id
o a 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. Puede ver los diversos tipos de nodos aquí (diagrama de MDN ):
Puede ver que un ELEMENT_NODE
es un tipo particular de nodo donde la nodeType
propiedad tiene un valor de 1
.
Por document.getElementById("test")
lo tanto , solo puede devolver un nodo y se garantiza que sea un elemento (un tipo específico de nodo). Por eso solo devuelve el elemento en lugar de una lista.
Como 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. Dado que estos solo pueden ser elementos (solo los elementos suelen tener un nombre de clase), técnicamente es un elemento nodeList
que solo tiene nodos de elemento de tipo y los diseñadores podrían haber hecho una colección con un nombre diferente que era un elementList
, pero eligieron usar solo un tipo de colección si tenía solo elementos o no.
EDITAR: HTML5 define HTMLCollection
una lista de elementos HTML (no cualquier nodo, solo elementos). Varias propiedades o métodos en HTML5 ahora devuelven un HTMLCollection
. Si bien es muy similar en interfaz a a nodeList
, ahora se hace una distinción en que solo contiene Elementos, no ningún tipo de nodo.
La distinción entre nodeList
ay HTMLCollection
tiene poco impacto en cómo se usa uno (por lo que puedo decir), pero los diseñadores de HTML5 ahora han hecho esa distinción.
Por ejemplo, la element.children
propiedad devuelve una colección HTMLC en vivo.