关于 HTMLCollections 和命名属性的问题,继续使用吗?

chr*_*ahl 5 html javascript standards dom htmlcollection

当引用 HTML 表单中的元素时,我经常使用 name 属性的名称/值。所以,如果表单的名称是“form01”,我指的是表单的书写document.forms.form01。这是一个例子:

let title = document.forms.form01.title;
console.log(title.value);
Run Code Online (Sandbox Code Playgroud)
<form name="form01">
  <input type="text" name="title" value="Hello World">
</form>
Run Code Online (Sandbox Code Playgroud)

这是一个 HTMLCollection,但在DOM 标准 #interface-htmlcollectiondocument.forms的文档中,它没有提到在这样的集合上直接使用名称作为属性(我认为它被称为“命名属性”)的可能性 -就像我用来指代表单元素时一样。相反,文档实际上指出这是“历史文物”——那么,我应该避免使用它吗?document.forms.form01

你能帮我找到这方面的文档吗?要么它是一个可以使用的(好)功能,要么它是应该避免的东西。

phe*_*nil 2

如果它没有被标记为已弃用或过时的功能,您绝对可以继续使用它!

\n

MDN Web 文档上有关HTMLCollection 的其他详细信息如下:

\n
\n

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

\n
\n
\n

至于 HTMLCollection 中的命名属性(正如@Kaiido指出的),本节指出:

\n
\n

支持的属性名称是以下步骤返回的列表中的值:

\n
    \n
  1. 令result为空列表。

    \n
  2. \n
  3. 对于集合表示的每个元素 ,按树顺序:

    \n
      \n
    1. 如果element的ID不在result中,则将元素\xe2\x80\x99s ID附加到result。

      \n
    2. \n
    3. 如果element位于HTML 命名空间中,并且其属性name值既不是空字符串也不是result中,则将元素\ xe2\x80\x99s属性值附加到result。name

      \n
    4. \n
    \n
  4. \n
  5. 返回结果。

    \n
  6. \n
\n
\n

另请注意,NodeList与 HTMLCollection属于同一部分(旧式集合)。请参阅MDN Web 文档上的NodeList。

\n
\n

前面提到的[LegacyUnenumerableNamedProperties](正如@Kaiido指出的)仅表明命名属性是不可枚举的(即, usingArray.from将仅返回索引项)。

\n

  • [LegacyUnenumerableNamedProperties] 本身并不表明该接口支持命名属性。[本段](https://dom.spec.whatwg.org/#ref-for-dfn-supported-property-names)确实如此。 (2认同)