P K*_*P K 265 html javascript dom
我在Node对象和Element对象之间完全混淆.
document.getElementById()
返回document.getElementsByClassName()
Node 对象时返回NodeList对象(元素或节点集合?)
如果div是一个Element Object,那么div Node对象呢?
什么是节点对象?
文档对象,Element对象和Text Object也是Node对象吗?
根据David Flanagan的书"文档对象,其元素对象和文本对象都是节点对象".
那么为什么一个对象可以继承Element对象的属性/方法以及Node对象呢?
如果是,我猜Node类和Element Class在继承的原型树中是相关的.
<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]
Run Code Online (Sandbox Code Playgroud)
jfr*_*d00 438
A node
是DOM层次结构中任何类型对象的通用名称.甲node
可能是一个内置的DOM元素如document
或document.body
,也可能是在HTML中指定的HTML标签,例如<input>
或<p>
或它可能是由系统创建的用于保存的文本块另一个元件内的文本节点.因此,简而言之,a node
是任何DOM对象.
An element
是一种特定类型,node
因为有许多其他类型的节点(文本节点,注释节点,文档节点等).
DOM由节点层次结构组成,其中每个节点可以具有父节点,子节点列表以及nextSibling和previousSibling.该结构形成树状层次结构.该document
节点将具有其子节点列表(head
节点和body
节点).该body
节点将具有其子节点列表(HTML页面中的顶级元素),依此类推.
所以,a nodeList
只是一个类似数组的列表nodes
.
元素是特定类型的节点,可以在HTML中使用HTML标记直接指定,并且可以具有类似a id
或a的属性class
.可以有孩子等...还有其他类型的节点,如评论节点,文本节点等......具有不同的特征.每个节点都有一个属性.nodeType
,可以报告它是什么类型的节点.您可以在此处查看各种类型的节点(来自MDN的图表):
您可以看到ELEMENT_NODE
一个特定类型的节点,其中nodeType
属性的值为1
.
因此document.getElementById("test")
,只能返回一个节点,并且它保证是一个元素(特定类型的节点).因此,它只返回元素而不是列表.
由于document.getElementsByClassName("para")
可以返回多个对象,因此设计人员选择返回a,nodeList
因为这是他们为多个节点列表创建的数据类型.由于这些只能是元素(只有元素通常具有类名),所以从技术上讲nodeList
,它只包含类型元素的节点,设计者可以制作一个不同名称的集合elementList
,但是他们选择只使用一种类型收集是否只有元素.
编辑: HTML5定义了HTMLCollection
一个HTML元素列表(不是任何节点,只有元素).HTML5中的许多属性或方法现在返回一个HTMLCollection
.虽然它与a的接口非常相似nodeList
,但现在区别在于它只包含Elements,而不包含任何类型的节点.
a nodeList
和a之间的区别HTMLCollection
对你如何使用它的影响很小(据我所知),但HTML5的设计者现在已经做出了这种区分.
例如,该element.children
属性返回一个实时HTMLCollection.
nop*_*ole 56
Node
是实现一个树状结构,所以它的方法是firstChild
,lastChild
,childNodes
等,这更是一个类的一个通用的树结构.
然后,一些Node
对象也是Element
对象. Element
继承自Node
. Element
对象实际上表示HTML文件中由标记指定的对象,例如<div id="content"></div>
.的Element
类中定义的属性和诸如方法attributes
,id
,innerHTML
,clientWidth
,blur()
,和focus()
.
有些Node
对象是文本节点,它们不是Element
对象.对于HTML文档,每个Node
对象都有一个nodeType
属性,指示它是什么类型的节点:
1: Element node
3: Text node
8: Comment node
9: the top level node, which is document
Run Code Online (Sandbox Code Playgroud)
我们可以在控制台中看到一些示例:
> document instanceof Node
true
> document instanceof Element
false
> document.firstChild
<html>...</html>
> document.firstChild instanceof Node
true
> document.firstChild instanceof Element
true
> document.firstChild.firstChild.nextElementSibling
<body>...</body>
> document.firstChild.firstChild.nextElementSibling === document.body
true
> document.firstChild.firstChild.nextSibling
#text
> document.firstChild.firstChild.nextSibling instanceof Node
true
> document.firstChild.firstChild.nextSibling instanceof Element
false
> Element.prototype.__proto__ === Node.prototype
true
Run Code Online (Sandbox Code Playgroud)
上面的最后一行显示Element
继承自Node
.(该行无法在IE __proto__
中使用.将需要使用Chrome,Firefox或Safari).
顺便说一下,document
对象是节点树的顶部,并且document
是一个Document
对象,并且Document
继承自Node
:
> Document.prototype.__proto__ === Node.prototype
true
Run Code Online (Sandbox Code Playgroud)
以下是Node和Element类的一些文档:
https://developer.mozilla.org/en-US/docs/DOM/Node
https://developer.mozilla.org/en-US/docs/DOM/Element
所有DOM问题的最佳信息来源
http://www.w3.org/TR/dom/#nodes
"实现Document,DocumentFragment,DocumentType,Element,Text,ProcessingInstruction或Comment接口(简称为节点)的对象参与树."
http://www.w3.org/TR/dom/#element
"元素节点简称为元素."
节点:http://www.w3schools.com/js/js_htmldom_nodes.asp
Node对象表示文档树中的单个节点.节点可以是元素节点,属性节点,文本节点或节点类型章节中解释的任何其他节点类型.
元素:http://www.w3schools.com/js/js_htmldom_elements.asp
Element对象表示XML文档中的元素.元素可能包含属性,其他元素或文本.如果元素包含文本,则文本在文本节点中表示.
重复:
小智 5
节点一般用于表示标签。分为3种:
属性注意:是其内部具有属性的节点。经验:<p id=”123”></p>
文本节点:是在开始和结束之间具有连续文本内容的节点。经验:<p>Hello</p>
元素节点:是其内部具有其他标签的节点。经验:<p><b></b></p>
每个节点可以同时是多个类型,不一定只有一个类型。
元素只是一个元素节点。