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

IT技术 javascript jquery html
2021-02-11 23:53:02

假设我有 adiv#parent和 Iappend以及remove使用 jquery 的元素。我如何能够检测到此类事件何时发生在div#parent元素上?

3个回答

不要使用像 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 });
不确定这在您的回答中是否值得一提,因为它没有直接回答这个问题,但是自定义元素有一个 disconnectedCallback
2021-03-19 23:53:02
@Qantas94Heavy 你是什么意思?如果性能损失是真的,为什么我们建议远离 DOMNodeRemoved?我也在考虑文档级别的一个。请参阅stackoverflow.com/questions/69426920/...
2021-03-20 23:53:02
@mmm 正如 Mr5o1 所指出的,您可以使用自定义元素。如果你不能,你可以将它绑定到父级并在更改时重新绑定:stackoverflow.com/q/50391422/2074608
2021-03-28 23:53:02
@DenisKolodin 哇,我没有注意到这条评论,抱歉。为了后代,这应该由这个问题来回答这确实意味着在文档级别放置一个事件,但突变事件具有如此大的性能损失,无论如何它可能无关紧要。
2021-04-06 23:53:02
感谢您的回答,但Mutation Observers有一个不好的行为:我想将观察者设置为稍后将附加到树的节点。我不知道父级(使用 'DOMNodeRemoved' 我可以。有什么想法吗?我希望节点监听自毁。
2021-04-08 23:53:02

按照@Qantas 在他的回答中的建议使用Mutation Observers


以下方法已弃用

您可以使用DOMNodeInsertedDOMNodeRemoved

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

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

MDN 文档

如果性能损失是真的,为什么我们建议远离 DOMNodeRemoved?我也在考虑文档级别的一个。请参阅stackoverflow.com/questions/69426920/...
2021-03-16 23:53:02
使用此方法,但配置仅用于侦听子 dom 更新,参考:academy.byidmore.com/post/...
2021-03-26 23:53:02
@satpal 是否可以将这些组合起来,而不是拥有两组代码?如果DOMNodeInserted or DOMNodeRemoved, function() {等。
2021-03-31 23:53:02
对于生产中的代码来说,它可能很慢而且是个坏主意,但这看起来是唯一同步工作的方法(与 MutationObserver 不同)。这是在没有其他合适的情况下进行调试的好选择,例如,在尝试查找更改 DOM 的代码行时。
2021-04-09 23:53:02
突变事件已弃用,此答案不再是正确的答案。Mutation Observers 被设计为 Mutation Events 的替代品,所以澳航的答案是正确的。developer.mozilla.org/en-US/docs/Web/Guide/Events/...developer.mozilla.org/en-US/docs/Web/API/MutationObserver
2021-04-11 23:53:02

你应该绑定DOMSubtreeModified事件

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

http://jsfiddle.net/WQeM3/

如果性能损失是真的,为什么我们建议远离 DOMNodeRemoved?我也在考虑文档级别的一个。请参阅stackoverflow.com/questions/69426920/...
2021-04-10 23:53:02
DOMSubtreeModified不推荐使用事件:我可以使用吗
2021-04-13 23:53:02