在针对某个问题的.item()
__proto__
属性提供an incorrect answer之后,我检查了childNodes
form
个forEach
元素并找到了forEach
方法。
Node.childNodes
的{{1}}方法未记录在Node.childNodes
,NodeList
或in 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)
});
});
答案 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。