HTMLCollection

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

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

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

此接口是 试图创建一个不可修改的列表,并且仅继续支持它以不破坏已经使用它的代码。现代 API 使用基于 JavaScript 数组 的类型来表示列表结构,从而使许多数组方法可用,并同时对它们的用法施加额外的语义(例如,使它们的项目只读)。

这些历史原因并不意味着您作为开发人员应该避免使用 HTMLCollection。您不会自己创建 HTMLCollection 对象,但您可以从 API(如 Document.getElementsByClassName())中获取它们,这些 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 标准
# interface-htmlcollection

浏览器兼容性

BCD 表仅在浏览器中加载

另请参阅