安全とは、によって作成された NodeListdocument.getElementsById('*');
がライブ オブジェクトであることを意味します。一部の要素は、JS エンジンがループするときに動的に追加または削除されます。
私がやろうとしていることは、DOM全体をループすることです(これはグリースモンキースクリプトにあるため、通常のWeb使用ではありませんが、そこにも当てはまると思います)、ノードCSSがいくつかのルールに一致するかどうかを確認し、その変更に従ってCSS。
この処理には時間がかかります。また、Web サイトには複数のスクリプト (画像の変更/ニュース記事の変更など) が実行されているため、遅かれ早かれ 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 の変動する先端に遭遇するという問題があります)