forEach方法Node.childNodes?
在提供了一个关于.item()
属性的错误答案后,我检查了form
元素的返回childNodes
的__proto__
,并find了一个forEach
方法。
Node.childNodes
的forEach
方法没有记载在NodeList
的规范中, MDN的Methods
或Interface NodeList中 ,也没有在使用forEach方法或链接到该Question的页面迭代NodeList中提及; 尽pipe它出现在Chromium 50中。
该方法是否仅在相对较新版本的Chrome / Chromium中可用? 如果是的话,这是logging?
有没有关于Node.childNodes
的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@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中进行更改。