forEach Node.childNodes的方法?

时间:2016-03-19 23:56:06

标签: javascript google-chrome dom chromium nodelist

在针对某个问题的.item() __proto__属性提供an incorrect answer之后,我检查了childNodes formforEach元素并找到了forEach方法。

Node.childNodes的{​​{1}}方法未记录在Node.childNodesNodeListin Methods at MDN的规范中,并且似乎没有在 Interface NodeList 或与该问题相关的网页;虽然它出现在Chromium 50中。

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

是否有关于forEach()的{​​{1}}方法的文档?

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)
  });
});

2 个答案:

答案 0 :(得分:9)

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

iterable<Node>;

根据IDL draft,这意味着

  

interface可以声明为 可迭代   接口正文中的 可迭代声明 (匹配Iterable)。

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

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

     
    

注意:在ECMAScript语言绑定中,是一个接口     iterable将具有“entries”,“forEach”,“keys”,“values”和     @@iterator上的interface prototype object属性。

  
     

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

答案 1 :(得分:5)

  

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

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

  

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

请参阅Chromium bug跟踪器上的Add support for [ArrayClass] and use that on 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。