A node
é o nome genérico para qualquer tipo de objeto na hierarquia DOM. A node
pode ser um dos elementos DOM internos, como document
or document.body
, pode ser uma tag HTML especificada no HTML, como <input>
or, <p>
ou pode ser um nó de texto criado pelo sistema para reter um bloco de texto dentro de outro elemento . Então, em poucas palavras, a node
é qualquer objeto DOM.
An element
é um tipo específico de, node
pois existem muitos outros tipos de nós (nós de texto, comentários, nós de documentos, etc.).
O DOM consiste em uma hierarquia de nós em que cada nó pode ter um pai, uma lista de nós filhos e um nextSibling e previousSibling. Essa estrutura forma uma hierarquia semelhante a uma árvore. O document
nó teria sua lista de nós filhos (o head
nó e o body
nó). O body
nó teria sua lista de nós filhos (os elementos de nível superior na sua página HTML) e assim por diante.
Portanto, a nodeList
é simplesmente uma lista de matrizes nodes
.
Um elemento é um tipo específico de nó, que pode ser especificado diretamente no HTML com uma tag HTML e pode ter propriedades como a id
ou a class
. pode ter filhos, etc ... Existem outros tipos de nós, como nós de comentários, nós de texto, etc ... com características diferentes. Cada nó tem uma propriedade .nodeType
que relata que tipo de nó é. Você pode ver os vários tipos de nós aqui (diagrama do MDN ):

Você pode ver um ELEMENT_NODE
é um tipo específico de nó em que a nodeType
propriedade possui um valor 1
.
Portanto, document.getElementById("test")
só pode retornar um nó e é garantido que ele seja um elemento (um tipo específico de nó). Por isso, apenas retorna o elemento em vez de uma lista.
Como document.getElementsByClassName("para")
podem retornar mais de um objeto, os designers optaram por retornar um nodeList
porque esse é o tipo de dados que eles criaram para uma lista de mais de um nó. Como esses elementos podem ser apenas elementos (apenas elementos geralmente têm um nome de classe), é tecnicamente um nodeList
que possui apenas nós do elemento type e os designers poderiam criar uma coleção com nome diferente elementList
, mas optaram por usar apenas um tipo da coleção, continha apenas elementos ou não.
EDIT: HTML5 define um HTMLCollection
que é uma lista de elementos HTML (não qualquer nó, apenas elementos). Várias propriedades ou métodos no HTML5 agora retornam um HTMLCollection
. Embora seja muito semelhante na interface a nodeList
, agora é feita uma distinção, pois contém apenas elementos, não qualquer tipo de nó.
A distinção entre a nodeList
e um HTMLCollection
tem pouco impacto em como você usa uma (até onde eu sei), mas os designers do HTML5 agora fizeram essa distinção.
Por exemplo, a element.children
propriedade retorna um HTMLCollection ativo.