我希望突变观察者能够监听其目标节点本身是否在 javascript 中被删除

Dha*_*i S 7 javascript dom mutation-observers

我正在目标节点上使用突变观察器。如果任何子节点或属性发生更改,它就会触发。但我有一个情况,我必须处理目标节点本身被删除的情况。这是行不通的。有办法处理这个问题吗?

log*_*yth 4

MutationObservers 可以观察 3 件事:

  • 属性改变
  • 文字内容改变
  • 子列表更改

然后,可以选择将这些更改事件冒泡,因此如果您想对目标及其所有子级进行更改,则可以这样做。

这意味着你无法通过倾听目标来完成你想要的事情。您需要将观察者附加到目标的父节点,并侦听父节点上删除要跟踪的节点的 childList 更改。

例如,而不是你所希望的这个假例子

var observer = new MutationObserver(callback);
observer(target, {
  // Fake non-existent option
  parent: true
});
Run Code Online (Sandbox Code Playgroud)

你做

var observer = new MutationObserver(function(mutations){
   var targetRemoved = mutations.some(function(mutation){
     return mutation.removedNodes.indexOf(target) !== -1;
   });

   if (targetRemoved) callback();
});
observer(target.parentNode, {
  childList: true
});
Run Code Online (Sandbox Code Playgroud)