document.getElementsByClassName()数组中的元素顺序

时间:2016-02-20 16:23:37

标签: javascript html

我正在打电话

font-size: 0px

在我的js代码中的html。

每次打电话时,我都会获得相同的元素顺序吗?

1 个答案:

答案 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);