forEach Node.childNodes的方法?

gue*_*314 13 javascript dom google-chrome nodelist chromium

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

所述forEach的方法Node.childNodes中没有的说明书中记载NodeList,Methods以MDN,或接口节点列表,并没有出现在被提及迭代使用的forEach方法的节点列表或链接到该问题页; 虽然它出现在Chromium 50中.

该方法仅适用于相对较新版本的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)
  });
});
Run Code Online (Sandbox Code Playgroud)
<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@example.com">
  <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>
Run Code Online (Sandbox Code Playgroud)

Ori*_*iol 9

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

iterable<Node>;
Run Code Online (Sandbox Code Playgroud)

根据IDL草案,这意味着

接口可以被宣布为可迭代通过使用 迭代声明(匹配Iterable在接口的主体).

iterable<value-type>;
iterable<key-type, value-type>;
Run Code Online (Sandbox Code Playgroud)

实现被声明为可迭代的接口的对象被迭代以获得一系列值.

注意:在ECMAScript语言绑定中,可迭代的接口将在其接口原型对象上具有"entries","forEach","keys","values"和 @@ iterator属性.

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


Ale*_*ara 5

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

是的,这是DOM4中的新功能,因此无法广泛使用.

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

请参阅为[ArrayClass]添加支持,并在Chromium bug跟踪器上的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上的补丁有一个运行时标志,因为不清楚这是否仍然可以实现.

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