2013-11-22 129 views

回答

18

使用Mutation Observers由@Qantas中建议他answer

您可以使用DOMNodeInsertedDOMNodeRemoved

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

$("div#parent").on('DOMNodeRemoved', function(e) { 
    console.log(e.target, ' was removed'); 
}); 

MDN Docs

+4

突变事件已被弃用,这个答案应该不再是正确的。 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 – Parziphal

3

你应该绑定DOMSubtreeModified事件

$("#parent").bind("DOMSubtreeModified",function(){ 
    console.log('changed'); 
}); 

http://jsfiddle.net/WQeM3/

+0

'DOMSubtreeModified'事件已被弃用:我可以使用(https://caniuse.com/#search=DOMSubtreeModified) – Cody

46

请勿使用像DOMNodeInserted和DOMNodeRemoved这样的突变事件。

相反,使用DOM Mutation Observers,这是在除了IE10所有现代浏览器都支持和较低(Can I use)。突变观察者旨在替代突变事件(已被弃用),因为它们由于flaws in its design而被发现性能低下。

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

x.observe(document.getElementById('parent'), { childList: true }); 
+4

感谢您的回答,但*突变观察者*有一个不好的行为:我想将观察者设置为将在稍后附加到树上的节点。我不知道父母(用'DOMNodeRemoved'我可以。任何想法?我希望节点听自我毁灭 – DenisKolodin

+0

@DenisKolodin哇,我没有注意到这个评论,对不起。为了后代的缘故,这应该由[这个问题](https://stackoverflow.com/q/31798816/2074608)。它的确意味着在文档级别放置一个事件,但是突变事件具有如此大的性能损失,它可能无所谓。 –