Под безопасностью я подразумеваю тот факт, что 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)