提问人:guest271314 提问时间:3/20/2016 最后编辑:Communityguest271314 更新时间:3/20/2016 访问量:2372
forEach 方法的 Node.childNodes?
forEach method of Node.childNodes?
问:
在为一个问题提供了关于 Node.childNodes
属性的错误答案后,我检查了一个元素的返回并找到了一种方法。.item()
__proto__
childNodes
form
forEach
在 NodeList 的规范、MDN 的方法
或接口 NodeList 中都没有记录该方法,并且在使用 forEach 方法或链接到该问题的页面迭代 NodeList
中似乎没有提到;尽管它似乎在 Chromium 50 中可用。forEach
Node.childNodes
该方法是否仅适用于相对较新版本的 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)
});
});
<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 protected]">
<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 语言绑定中,一个接口是 iterable 在其接口原型对象上将具有 “entries”, “forEach”, “keys”, “values” 和 @@iterator 属性。
如果给定单个类型参数,则接口具有一个值 迭代器,并提供指定类型的值。
该方法是否仅适用于相对较新版本的 Chrome / Chromium?如果是,是否记录在案?
是的,这是 DOM4 中的新功能,因此尚未广泛使用。
是否有任何关于 Node.childNodes 的 forEach() 方法的文档?
请参阅添加对 [ArrayClass] 的支持,并在 Chromium 错误跟踪器的 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 的补丁有一个运行时标志,因为目前尚不清楚这是否仍然可能实现。
从历史上看,这些类似数组的对象不包含数组原型中的这些方法,导致像 .现在,这意味着在 DOM4 中进行更改。Array.prototype.forEach.call(nodeList, function() { ... })
评论