如何检测从dom元素添加/删除的元素?

Der*_*rek 39 html javascript jquery html5

说我有一个div#parent和我append以及remove使用jquery元素吧.我怎样才能检测到div#parent元素发生这种事件的时间?

Qan*_*avy 89

不要使用像DOMNodeInserted和DOMNodeRemoved这样的突变事件.

相反,使用DOM Mutation Observers,除了IE10和更低版本(我可以使用)之外的所有现代浏览器都支持它.突变观察者旨在取代突变事件(已被弃用),因为它们的设计存在缺陷,因此发现它们的性能较低.

var x = new MutationObserver(function (e) {
  if (e[0].removedNodes) console.log(1);
});

x.observe(document.getElementById('parent'), { childList: true });
Run Code Online (Sandbox Code Playgroud)

  • 谢谢你的回答,但*Mutation Observers*有一个不好的行为:我想将观察者设置为稍后将附加到树的节点.我不知道父母(用'DOMNodeRemoved'我可以.任何想法?我希望节点听自毁. (8认同)
  • 不确定这是否值得在您的答案中提及,因为它没有直接回答这个问题,但自定义元素有一个detachedCallback (3认同)

Sat*_*pal 23

使用@Qantas在他的回答中建议的变异观察者


以下方法已弃用

您可以使用DOMNodeInsertedDOMNodeRemoved

$("#parent").on('DOMNodeInserted', function(e) {
    console.log(e.target, ' was inserted');
});

$("#parent").on('DOMNodeRemoved', function(e) {
    console.log(e.target, ' was removed');
});
Run Code Online (Sandbox Code Playgroud)

MDN文档

  • 不推荐使用变异事件,此答案不再是正确答案.Mutation Observers被设计为Mutation Events_的替代品,因此Qantas的回答是正确的.https://developer.mozilla.org/en-US/docs/Web/Guide/Events/Mutation_events和https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver (9认同)

归档时间:

查看次数:

32280 次

最近记录:

7 年 前