forEach方法Node.childNodes?

在提供了一个关于.item()属性的错误答案后,我检查了form元素的返回childNodes__proto__ ,并find了一个forEach方法。

Node.childNodesforEach方法没有记载在NodeList的规范中, MDN的Methods或Interface NodeList中 ,也没有在使用forEach方法或链接到该Question的页面迭代NodeList中提及; 尽pipe它出现在Chromium 50中。

该方法是否仅在相对较新版本的Chrome / Chromium中可用? 如果是的话,这是logging?

有没有关于Node.childNodesforEach()方法的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@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> 

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

 iterable<Node>; 

根据IDL草案 ,这意味着

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

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

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

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

如果给出了一个单一的types参数,那么接口有一个值迭代器,并提供指定types的值。

该方法是否仅在相对较新版本的Chrome / Chromium中可用? 如果是的话,这是logging?

是的,这是DOM4中的新function,所以不能广泛使用。

有没有关于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中进行更改。