我希望变异观察者监听它的目标节点本身是否在javascript中删除

时间:2016-07-07 09:49:29

标签: javascript dom mutation-observers

我在目标节点上使用变异观察器。如果任何子节点或属性发生更改,它将触发。但我有一个案例,我必须处理目标节点本身被删除。这不起作用。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

MutationObservers可以监视3件事:

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

然后可选地,这些更改事件可以冒泡,因此如果您想要更改目标和所有目标儿童,您可以这样做。

这意味着您无法通过聆听目标来实现目标。您需要将观察者附加到目标的父节点,并在父节点上侦听删除要跟踪的节点的子列表更改。

e.g。而不是你希望的那个假例子

var observer = new MutationObserver(callback);
observer(target, {
  // Fake non-existent option
  parent: true
});
你做了

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

答案 1 :(得分:0)

can-dom-mutate可以做到这一点:

import domMutate from "can-dom-mutate";
domMutate.onNodeRemoval(yourEleement, function(){

})

它通过侦听整个文档中的元素删除来实现。