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>
元素,其 id
为 myForm
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 表仅在浏览器中加载