当引用HTML表单中的元素时,我经常使用name属性的名称/值。因此,如果表单的名称为"form01",则我指的是写为document.forms.form01
的表单。下面是一个例子:
let title = document.forms.form01.title;
console.log(title.value);
<form name="form01">
<input type="text" name="title" value="Hello World">
</form>
document.forms
是一个HTMLCollection,但在DOM标准#interface-htmlcollection的文档中,它没有提到在这样的集合上直接使用名称作为属性的可能性(我认为它被称为"命名属性") -就像我使用document.forms.form01
来引用表单元素一样。相反,文档实际上指出这是"一个历史文物"。——那么,我应该避免使用它吗?
你能帮我找到这方面的文档吗?要么它是一个可以使用的(好的)特性,要么它是应该避免的。
如果它没有被标记为已弃用或过时的功能,您绝对可以继续使用它!
关于HTMLCollection的MDN Web Docs的其他详细信息如下:
HTMLCollection
接口表示元素(按文档顺序)的通用集合(类似于参数的数组对象),并提供从列表中进行选择的方法和属性。
对于HTMLCollection中的命名属性(如@Kaiido所指出的),本节声明:
支持的属性名是以下步骤返回的列表中的值:
让result为空列表
对于集合所表示的每个元素,按树顺序:
如果元素的ID不在result中,则将元素的ID附加到result。
如果元素在HTML命名空间中,并且
name
属性的值既不是空字符串也不在result中,则将元素的name
属性值附加到result。<返回em>。返回em>
还要注意,NodeList与HTMLCollection属于同一节(旧式集合)。请参阅MDN Web Docs中的NodeList。
前面提到的[LegacyUnenumerableNamedProperties]
(正如@Kaiido指出的)只表明命名属性是不可枚举的(即,使用Array.from
只会返回索引项)。