从NodeList的 MDN: 在某些情况下,NodeList是一个实时集合,这意味着DOM中的变化反映在集合中。 例如,Node.childNodes是活动的: var parent = document.getElementById('parent'); var child_nodes = parent.childNodes; console.log(child_nodes.length); // let's assume "2" parent.appendChild(document.createElement('div')); console.log(child_nodes.length); // should output "3" 在其他情况下,NodeList是一个静态集合,意味着DOM中的任何后续更改都不会影响集合的内容。 document.querySelectorAll返回一个静态的NodeList。 所以….有点讨厌! 有什么中央参考哪些方法返回实时列表,哪些返回静态列表,而不必单独检查DOM API的各个部分? 这里有什么规定吗?
在提供了一个关于.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"> […]