我想观察和有时被删除然后重新创建的元素。我的问题是观察者被元素摧毁,并且没有用元素重新创建,我无法检测何时发生这种情况以重新创建观察者。
MDN说“注意:根据规范,如果目标元素被删除,则垃圾收集器会删除MutationObserver。”
无论如何检测到删除?我正在观察一个元素,我想知道该元素何时被删除。我可以检测它的子节点是否已被删除,但我无法检测它本身是否已被删除。
我注册了所有突变,但删除元素时不会调用回调。
我尝试使用setInterval来检查元素是否消失,但是当元素被删除然后快速重新创建时,这不能很好地工作。
答案 0 :(得分:0)
删除设置了MutationObserver的元素时,它不会触发。 specification仅允许侦听属性,字符数据和子节点的更改。
因此,解决方案是在未删除的父(或祖先)元素上设置MutationObserver。然后,在回调中,您必须遍历MutationRecords以检查其removedNodes
属性是否包含您要查找的元素。
该代码将如下所示:
let mutationObserver = new MutationObserver((mutationList, observer) => {
for (let mutationRecord of mutationList) {
if (mutationRecord.removedNodes) {
for (let removedNode of mutationRecord.removedNodes) {
if (removedNode.id === 'myElement') {
...
return;
}
}
}
}
});
处理完删除的元素后,return
语句就在那里停止循环遍历其余元素。