Estoy totalmente confundido entre el objeto Node y el objeto Element.
document.getElementById()
devuelve el objeto Element mientras document.getElementsByClassName()
devuelve el objeto NodeList (¿Colección de elementos o nodos?)
Si un div es un objeto elemento, ¿qué pasa con el objeto div Node?
¿Qué es un objeto de nodo?
¿Son el objeto documento, el objeto Elemento y el Objeto de texto también objeto Nodo?
Según el libro de David Flanagan 'El objeto de documento, sus objetos de elemento y los objetos de texto son todos objetos de nodo'.
Entonces, ¿cómo es que un objeto puede heredar propiedades / métodos del objeto Element y del objeto Node?
En caso afirmativo, supongo que la clase de nodo y la clase de elemento están relacionadas en el árbol de herencia prototípico.
<div id="test">
<p class="para"> 123 </p>
<p class="para"> abc </p>
</div>
<p id="id_para"> next </p>
document.documentElement.toString(); // [object HTMLHtmlElement]
var div = document.getElementById("test");
div.toString(); // [object HTMLDivElement]
var p1 = document.getElementById("id_para");
p1.toString(); // [object HTMLParagraphElement]
var p2 = document.getElementsByClassName("para");
p2.toString(); //[object HTMLCollection]
fuente
Respuestas:
A
node
es el nombre genérico para cualquier tipo de objeto en la jerarquía DOM. Anode
podría ser uno de los elementos DOM integrados comodocument
odocument.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, anode
es cualquier objeto DOM.Un
element
es un tipo específiconode
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 (elhead
nodo y elbody
nodo). Elbody
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 matriznodes
.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 aclass
. 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 lanodeType
propiedad tiene un valor de1
.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 unnodeList
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 elementonodeList
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 unelementList
, 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 unHTMLCollection
. Si bien es muy similar en interfaz a anodeList
, ahora se hace una distinción en que solo contiene Elementos, no ningún tipo de nodo.La distinción entre
nodeList
ayHTMLCollection
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.fuente
Node
es para la implementación de una estructura de árbol, por lo que sus métodos son parafirstChild
,lastChild
,childNodes
, etc. Es más de una clase de una estructura de árbol genérico.Y luego, algunos
Node
objetos también sonElement
objetos.Element
hereda deNode
.Element
En realidad, los objetos representan los objetos especificados en el archivo HTML mediante etiquetas como<div id="content"></div>
. LaElement
clase define las propiedades y métodos, tales comoattributes
,id
,innerHTML
,clientWidth
,blur()
, yfocus()
.Algunos
Node
objetos son nodos de texto y no sonElement
objetos. CadaNode
objeto tiene unanodeType
propiedad que indica qué tipo de nodo es, para documentos HTML:Podemos ver algunos ejemplos en la consola:
La última línea de arriba muestra que
Element
hereda deNode
. (esa línea no funcionará en IE debido a__proto__
que deberá usar Chrome, Firefox o Safari).Por cierto, el
document
objeto es la parte superior del árbol de nodos, ydocument
es unDocument
objeto, y tambiénDocument
hereda deNode
:Aquí hay algunos documentos para las clases Nodo y Elemento:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
fuente
<span data-a="1" >123</span>
? Este lapso es un elemento que tiene su propio nodo. pero el atributo también tiene su propio nodo?La mejor fuente de información para todos sus problemas DOM
http://www.w3.org/TR/dom/#nodes
"Los objetos que implementan la interfaz Document, DocumentFragment, DocumentType, Element, Text, ProcessingInstruction o Comment (simplemente llamados nodos) participan en un árbol".
http://www.w3.org/TR/dom/#element
"Los nodos de elementos se conocen simplemente como elementos".
fuente
Nodo: http://www.w3schools.com/js/js_htmldom_nodes.asp
El objeto Node representa un nodo único en el árbol del documento. Un nodo puede ser un nodo de elemento, un nodo de atributo, un nodo de texto o cualquier otro de los tipos de nodo explicados en el capítulo Tipos de nodo.
Elemento: http://www.w3schools.com/js/js_htmldom_elements.asp
El objeto Element representa un elemento en un documento XML. Los elementos pueden contener atributos, otros elementos o texto. Si un elemento contiene texto, el texto se representa en un nodo de texto.
duplicar :
fuente
El nodo se usa para representar etiquetas en general. Dividido en 3 tipos:
Nota de atributo: es un nodo que dentro de él tiene atributos. Exp:
<p id=”123”></p>
Nodo de texto: es un nodo que entre la apertura y el cierre tiene contenido de texto contian. Exp:
<p>Hello</p>
Nodo de elemento: es un nodo que dentro de él tiene otras etiquetas. Exp:
<p><b></b></p>
Cada nodo puede ser tipos simultáneamente, no necesariamente solo de un tipo único.
Elemento es simplemente un nodo de elemento.
fuente