HTMLCollection

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

HTMLCollection 接口代表一个通用集合(类似数组的对象,类似于 arguments),其中包含元素(按文档顺序),并提供用于从列表中选择的方法和属性。

HTML DOM 中的 HTMLCollection 是实时的(live);当底层文档发生更改时,它会自动更新。因此,如果需要添加、移动或删除节点,最好制作一份副本(例如,使用 Array.from)进行迭代。

此接口之所以命名为 HTMLCollection 是出于历史原因,因为在现代 DOM 之前,实现此接口的集合只能包含 HTML 元素作为其项。

这个接口曾是 创建不可修改列表的尝试,并且至今仍然被支持,以免破坏现有代码。现代 API 使用基于 JavaScript 数组 的类型来表示列表结构,从而提供了许多数组方法,同时对其使用施加了额外的语义(例如,使其项只读)。

这些历史原因并不意味着作为开发人员,您应该避免使用 HTMLCollection。您不会自己创建 HTMLCollection 对象,而是通过诸如 Document.getElementsByClassName() 之类的 API 获取它们,并且这些 API 并未被弃用。但是,请注意与真实数组的语义差异。

实例属性

HTMLCollection.length 只读

返回集合中的项数。

实例方法

HTMLCollection.item()

返回列表中给定从零开始的 index 处的特定元素。如果 index 超出范围,则返回 null

这是访问 collection[i] 的替代方法(当 i 超出范围时,后者返回 undefined)。这主要对非 JavaScript DOM 实现有用。

HTMLCollection.namedItem()

返回其 ID 或(作为备用)名称与 name 指定的字符串匹配的特定节点。按名称匹配仅作为最后手段,仅在 HTML 中进行,并且仅当引用的元素支持 name 属性时。如果没有给定名称的节点存在,则返回 null

这是访问 collection[name] 的替代方法(当 name 不存在时,后者返回 undefined)。这主要对非 JavaScript DOM 实现有用。

JavaScript 中的用法

HTMLCollection 也通过名称和索引将其成员作为属性公开。HTML ID 可能包含 :. 作为有效字符,这将需要使用方括号表示法进行属性访问。目前,HTMLCollection 对象不识别纯数字 ID,这会与数组式访问产生冲突,尽管 HTML 允许这些 ID。

例如,假设文档中有一个 <form> 元素,其 idmyForm

js
let elem1, elem2;

// document.forms is an HTMLCollection

elem1 = document.forms[0];
elem2 = document.forms.item(0);

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms.myForm;
elem2 = document.forms.namedItem("myForm");

alert(elem1 === elem2); // shows: "true"

elem1 = document.forms["named.item.with.periods"];

规范

规范
DOM
# 接口-htmlcollection

浏览器兼容性

另见