在被破坏的元素上使用 mutationObservers 的最佳方法

Best approach for using mutationObservers on elements which get destroyed

我正在尝试 运行 Angular 1 站点上的脚本,我的脚本查找 DOM 到 运行 函数中的更改。然而,由于它是一个单页应用程序,我首选的变异目标节点可以被销毁和替换,这会阻止 mutationObserver 工作,因为它的目标不再存在。 我觉得以其中一个父节点为目标有点混乱,因为它将拾取数百个突变并寻找我喜欢的一个。

我可以使用更好的方法吗?

只需要创建一个 MutationObserver 实例。在元素从 document 中删除之前调用 observer.disconnect()

当新元素附加到 document 时,使用目标元素和原始配置调用原始 MutationObserver 实例的 .observe() 方法。

const el = "div";

let i = 0;

let n = 0;

function create() {

  let div = document.createElement(el);
  div.textContent = el + " " + ++i;
  div.contentEditable = true;
  document.body.appendChild(div);
  return div
}

let div = create();

function handleMutation(mutation) {
  console.log(mutation.type);
  if (++n === 3) {
    n = 0;
    observer.disconnect();
    div.parentElement.removeChild(div);
    div = create();
    // use same `MutationObserver` instance for new `<div>` element
    observer.observe(div, config);
  };
}

const observer = new MutationObserver(function(mutations) {
  mutations.forEach(handleMutation);
});

const config = {
  childList: true,
  subtree: true,
  characterData: true
};

observer.observe(div, config);