该元素是否作为表单元素 HTMLCollection 的 name 属性的值进行访问?

Is the element accessed as the value of the name attribute of the form element HTMLCollection?

提问人:Sein kim 提问时间:8/8/2023 最后编辑:Sein kim 更新时间:8/12/2023 访问量:54

问:

for (let i of document.formBox) {
  console.log(i)
};
<form name="formBox">
  <input name="inputOne">
  <input name="inputTwo">
  <button name='btn'>BUTTON</button>
</form>

上面的代码工作正常。但是,是一个 ?为什么我可以使用语句?document.formBoxHTMLCollectionfor..of

我以为回来了.然而,在不小心写了那段代码时,我感到很尴尬。document.formNameHTMLElement

JavaScript HTMLCollection for-of-loop

评论


答:

1赞 Quentin 8/8/2023 #1

它可能是一个元素或一个集合,具体取决于有多少元素具有该名称。

for ... of将处理元素集合,因为它关心的是值是可迭代的,而不是它是一个集合。

console.log(document.foo.toString());
console.log(document.bar.toString());

for (let x of document.bar) {
    console.log(x.toString());
}
<form name="foo"></form>
<form name="foo"></form>

<form name="bar"><input /><input /><input /></form>

在上面,是一个(包含实例),因为有多个形式的名称;您可以使用遍历该集合中的表单。但不是,因为只有一种形式的名称为 .相反,它是一个 .但实例也是可迭代的;迭代它们会遍历表单中的元素。document.fooHTMLCollectionHTMLFormElement"foo"for...ofdocument.barHTMLCollection"bar"HTMLFormElementHTMLFormElement

我强烈建议避免使用,因为它是模棱两可的。坚持和相反。document.nameOfElementquerySelectorquerySelectorAll

-1赞 MaikeruDev 8/8/2023 #2

在现代浏览器中,HTMLCollection(以及 NodeList)是可迭代的,这意味着您可以使用 for...of 循环来循环访问这些集合中包含的元素。

我理解这种混淆,因为在旧版本的 JavaScript 中,这些集合是不可迭代的,您必须使用像 for 这样的传统循环或像 Array.prototype.forEach.call() 这样的方法来迭代它们。

意义:

在您的代码中,for...of 循环遍历该窗体中包含的元素(在本例中为两个输入元素和按钮)。