【发布时间】:2013-09-30 19:37:08
【问题描述】:
我一直在努力彻底理解 DOM。目前我正在遍历 DOM 树,我似乎发现了一些不一致的地方。
- 在 nodeList 上,我可以使用索引来遍历列表
- 在 HTMLElement 上我不能使用索引
请看这个小提琴的例子:http://jsfiddle.net/AmhVk/4/
那么问题来了,为什么 nodeList 有一个像 element[0], element1 这样的可索引列表而 HTMLElement 没有?
有人能详细解释一下吗?谢谢...
<ul id="jow">
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li class="active"><a href="">Item</a></li>
<li><a href="">Item</a></li>
<li><a href="">Item</a></li>
</ul>
<div id="ieps"></div>
function simple(){
var li = document.querySelectorAll(".active");
var ul = li[0].parentNode;
var getULchild = ul.children[0];
var ieps = document.getElementById("ieps");
ieps.innerHTML += "ul will return = " + ul + "<br>";
ieps.innerHTML += "li will return = " + li + "<br><br>";
ieps.innerHTML += "ul[0] will return: " + ul[0] + "<br>";
ieps.innerHTML += "li[0] will return: " + li[0] + "<br><br>";
}
此外,在小提琴中,如果我删除 1 个包含“活动”类的 li。这仍然会返回一个 nodeList 而不是一个 HTMLElement:jsfiddle.net/AmhVk/5
【问题讨论】:
-
因为
NodeList是一个数组(-like) class 持有HTMLElements?HTMLElement仅适用于单个节点,而不适用于列表。 -
A
NodeList是一个类似数组的对象,包含一定数量的节点。HTMLElement是元素本身;它是一个对象,其值为元素本身,并且不包含其他元素。尝试在其上使用类似数组的索引就像尝试做document.querySelectorAll(".active")[0][0]; -
那么,我怎样才能得到 ul 作为 nodeList 呢?
-
另外,在小提琴中,如果我删除 1 个包含“活动”类的 li。这仍然会返回一个 nodeList 而不是单个 HTMLElement。 jsfiddle.net/AmhVk/5
标签: javascript dom tree-traversal nodelist