安全我的意思是 NodeList 创建的事实document.getElementsById('*');
是一个活动对象。当 JS 引擎循环通过它时,会动态添加或删除一些元素。
我打算做的事情是遍历整个 DOM(这将在一个greasemonkey 脚本中,因此不适用于正常的网络使用,但我认为它也适用于那里),检查节点 CSS 是否匹配某些规则并根据该更改的CSS。
这个过程需要一些时间,并且由于网站上有多个脚本(更改图像/新闻故事等)在其上运行,因此迟早会不断添加和删除 DOM 节点,有时节点会在处理时立即消失。
快速我的意思是递归地做它更好:
function traverseDOM(node,f) {
if (node.nodeType !== 1) return;
f.apply(node);
for (var i = 0; i < node.childNodes.length; i++) {
traverseDOM(node.childNodes[i],f);
}
}
(但这会浪费时间检查nodeType)或for
循环:
nodes = document.getElementsByTagName('*');
for (var i=0; i<nodes.length; i++) {
//do my stuff
}
(但这最终会遇到问题,它会遇到 NodeList 的波动提示)