Javascript 对变异观察者使用节点编辑器(或TreeWalker)
我使用变异观察器来监视DOM的更改,我有一个NodeIerator,它用动态创建的内容替换某些包含由正则表达式过滤的文本的文本节点 我遇到的问题是,在第一次运行NodeIterator时,节点迭代器现在指向null,它无法针对动态插入的内容运行算法。如果我尝试重新分配它,它就会挂断。为什么挂断了?这个问题有解决办法吗Javascript 对变异观察者使用节点编辑器(或TreeWalker),javascript,mutation-observers,Javascript,Mutation Observers,我使用变异观察器来监视DOM的更改,我有一个NodeIerator,它用动态创建的内容替换某些包含由正则表达式过滤的文本的文本节点 我遇到的问题是,在第一次运行NodeIterator时,节点迭代器现在指向null,它无法针对动态插入的内容运行算法。如果我尝试重新分配它,它就会挂断。为什么挂断了?这个问题有解决办法吗 var nodeIterator = document.createNodeIterator( document.body, NodeFilter.
var nodeIterator = document.createNodeIterator(
document.body,
NodeFilter.SHOW_TEXT,
acceptAlgo,
false
);
iterate(nodeIterator);
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
if (mutation.addedNodes) {
var dynamicNode = document.createNodeIterator(
mutation.target,
NodeFilter.SHOW_TEXT,
acceptAlgo,
false
);
iterate(dynamicNode);
}
});
});
function iterate(iterator) {
while ((node = iterator.nextNode())) {
replaceFunction(node);
}
}
var config = {
attributes: false,
childList: true,
characterData: false,
subtree: true
};
observer.observe(document.body, config);
1.您的MutationObserver回调也会处理替换节点,从而创建挂起浏览器2的无限循环。为什么要处理
突变.target
(它可能是整个文档.body
)而不是每个添加的节点?那天晚上晚些时候我意识到了这一点,但你肯定是对的。谢谢你的回复。