forEach 方法的 Node.childNodes?

forEach method of Node.childNodes?

提问人:guest271314 提问时间:3/20/2016 最后编辑:Communityguest271314 更新时间:3/20/2016 访问量:2372

问:

在为一个问题提供了关于 Node.childNodes 属性的错误答案后,我检查了一个元素的返回并找到了一种方法。.item()__proto__childNodesformforEach

在 NodeList 的规范、MDN 的方法或接口 NodeList 中都没有记录该方法,并且在使用 forEach 方法或链接到该问题的页面迭代 NodeList 中似乎没有提到;尽管它似乎在 Chromium 50 中可用。forEachNode.childNodes

该方法是否仅适用于相对较新版本的 Chrome / Chromium?如果是,是否记录在案?

是否有任何关于方法的文档?forEach()Node.childNodes


document.querySelector("form").addEventListener("submit", function(e) {
  e.preventDefault();
  var form = e.target;
  form.childNodes.forEach(function(el) {
    if (el.tagName === "INPUT" && el.type !== "submit")
      snippet.log("name:" + el.name + ", value:" + el.value)
  });
});
<form>
  <input type="text" name="firstName" value="The first name">
  <input type="text" name="lastName" value="The last name">
  <input type="email" name="emailAddress" value="[email protected]">
  <br>
  <input type="submit" value="Submit">
</form>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="//tjcrowder.github.io/simple-snippets-console/snippet.js"></script>

javascript google-chrome dom chromium nodelist

评论


答:

9赞 Oriol 3/20/2016 #1

DOM4 现在将 NodeList 定义为可迭代对象:

iterable<Node>;

根据 IDL 草案,这意味着

可以通过在接口主体中使用可迭代声明(匹配 Iterable)将接口声明为可迭代

iterable<value-type>;
iterable<key-type, value-type>;

实现声明为可迭代的接口的对象 支持迭代以获取值序列。

注意:在 ECMAScript 语言绑定中,一个接口是 iterable 在其接口原型对象上将具有 “entries”, “forEach”, “keys”, “values” 和 @@iterator 属性。

如果给定单个类型参数,则接口具有一个值 迭代器,并提供指定类型的值。

5赞 Alexander O'Mara 3/20/2016 #2

该方法是否仅适用于相对较新版本的 Chrome / Chromium?如果是,是否记录在案?

是的,这是 DOM4 中的新功能,因此尚未广泛使用。

是否有任何关于 Node.childNodes 的 forEach() 方法的文档?

请参阅添加对 [ArrayClass] 的支持,并在 Chromium 错误跟踪器的 NodeList 上使用它:

https://bugs.webkit.org/show_bug.cgi?id=81573

http://dom.spec.whatwg.org/#interface-nodelist

DOM4 将 NodeList 规范为在其原型链中包含 Array.prototype。

关于这个的更多背景。[ArrayClass] 允许我们做一些事情,比如 document.querySelectorAll('.foo').forEach 等。bugs.webkit.org 的补丁有一个运行时标志,因为目前尚不清楚这是否仍然可能实现。

从历史上看,这些类似数组的对象不包含数组原型中的这些方法,导致像 .现在,这意味着在 DOM4 中进行更改。Array.prototype.forEach.call(nodeList, function() { ... })