我正在打电话
font-size: 0px
在我的js代码中的html。
每次打电话时,我都会获得相同的元素顺序吗?
答案 0 :(得分:12)
是的,在符合要求的情况下,您将会it returns不是数组,而是HTMLCollection
。结果将是文档顺序(自上而下,深度优先遍历 - 这是一种奇特的说法,看看标记时的样子:-))。
例如,使用此文档:
!!(a & B)
<div id="d1" class="a">
<div id="d2" class="a">
<div id="d3" class="a"></div>
</div>
<div id="d4" class="a"></div>
</div>
<div id="d5" class="a"></div>
将按顺序可靠地列出它们:d1,d2,d3,d4,d5。
请注意,某些旧版浏览器不支持getElementsByClassName("a")
,尤其是IE8。支持它的一切模糊现代也支持更普遍有用的querySelectorAll
(支持基于任何CSS选择器的查询),其中(反过来)在IE8中也是。
其他说明:
getElementsByClassName
会返回直播 getElementsByClassName
,这意味着如果您添加,删除或更改元素,您已拥有的集合将会更新。这可能是有用的,强大的,或令人惊讶的,取决于你正在做什么。HTMLCollection
会返回快照 querySelectorAll
,例如,不是“直播”。示例:
HTMLCollection
var byClassName = document.getElementsByClassName("a");
var bySelector = document.querySelectorAll(".a");
snippet.log("Before adding another one:");
snippet.log("byClassName.length = " + byClassName.length);
snippet.log("bySelector.length = " + bySelector.length);
var div = document.createElement("div");
div.className = "a"
document.body.appendChild(div);
snippet.log("AFTER adding another one:");
snippet.log("byClassName.length = " + byClassName.length);
snippet.log("bySelector.length = " + bySelector.length);