【发布时间】:2012-04-16 06:36:25
【问题描述】:
我完全混淆了 Node 对象和 Element 对象。
document.getElementById() 返回 Element 对象,而 document.getElementsByClassName()
返回 NodeList 对象(元素或节点的集合?)
如果一个 div 是一个元素对象,那么 div 节点对象呢?
什么是节点对象?
document对象、Element对象、Text对象也是Node对象吗?
根据 David Flanagan 的书“文档对象,其元素对象和文本对象都是节点对象”。
那么一个对象怎么能继承Element对象和Node对象的属性/方法呢?
如果是,我猜节点类和元素类在继承的原型树中是相关的。
<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]
【问题讨论】:
-
节点有12种,element是其中之一
-
这12种不都是Element Object吗?比如 1 = ELEMENT_NODE, 3 = TEXT_NODE,我认为两者也是 Element 对象。
-
不,他们不是。元素只是单一类型的节点。
-
现在还在使用吗?自从看到 Mozilla 的文档后,我问它说: var elements = document.getElementsByClassName(names);元素是已找到元素的实时 HTMLCollection。因此,显然,getElementsByClassName 不再返回 NodeList。
-
WHATWG:
The nodes representing HTML elements in the DOM...(3.2.2)。一些吹毛求疵的人可能会从中得出 is 有点不同。尽管如此,该规范似乎以可互换的方式使用了这些术语(DOM 节点代表 HTML 元素,仅代表 HTML 元素)。
标签: javascript html dom