将NodeIterator(或TreeWalker)与MutationObservers一起使用

时间:2016-07-20 05:33:32

标签: javascript mutation-observers

我使用变异观察器来监控DOM的变化,我有一个NodeIterator,用于替换某些文本节点,这些节点包含由具有动态创建内容的正则表达式过滤的文本。

我遇到的问题是,在第一次运行NodeIterator时,Node Iterator现在指向null,它不能针对动态插入的内容运行算法。如果我试图重新分配它,它会挂断。为什么要挂断?这个问题有解决方案吗?

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);

0 个答案:

没有答案