突变观察者未能检测到元素's删除dom
Mutation Observer fails to detect element's dom removal
所以,我认为这将是非常直接的,过去有一个DOMNodeRemoved
事件,但这是不推荐的,相反,应该使用MutationObserver,问题是,即使有适当的配置,它也不会触发。
根据这篇关于从突变事件迁移到突变观察者的文章,检测节点的dom移除的配置是{ childList: true, subtree: true }
,这符合childList
是强制性的,subtree
意味着它将捕获突变,不仅是目标,而且目标的后代也将被观察。
无论如何,我已经对这个问题进行了jsfidd,它非常直接,<button>
删除了<div>
,观察者应该记录突变记录,但它没有,看看你是否能弄清楚:)
HTML
<div>Oh my god karen, you can't just ask someone why they're white.</div>
<button>^Remove</button>
JavaScript
div = document.querySelector("div");
callback = function(records){
console.log(records);
}
config = {
childList:true,
subtree:true
}
observer = new MutationObserver(callback);
observer.observe(div,config);
button = document.querySelector("button");
button.addEventListener("click",function(){
div.parentNode.removeChild(div);
});
谢谢!
正如名称所示,childList
只捕获对观察节点的直属子节点列表的更改,而subtree
将任何指定的条件扩展到所有子节点(它自己不做任何事情)。
但你两者都不做。您正在移除观察到的节点本身,同时保持其子节点不变。
只需观察div.parentNode
就可以解决您的问题。
相关文章:
- IE9-添加和删除DOM元素会破坏父keydown事件
- JQuery.删除DOM树中的上一个同级
- 从 DOM 数组中删除 DOM 对象
- 如何在单击按钮时删除 DOM 元素
- 如何删除DOM事件处理程序的重复JavaScript代码
- 突变观察者未能检测到元素's删除dom
- 如何在以下脚本中删除dom选择器中的链接
- 无法使用 Javascript 删除 DOM 元素
- Angular js 避免在用户无限滚动和删除 dom 元素时重复数据
- 删除 DOM 事件观察器
- 删除 DOM 的所有元素中的属性
- jquery 中的 .remove() 不会立即删除 DOM
- 避免使用 jquery 创建和删除 DOM 的对象发生内存泄漏
- 如何在 Angularjs 视图中删除 dom 实例
- 尝试从 dom 文档中删除 dom 节点时出错
- 我应该在删除 DOM 元素后调用 jQuery.off 吗?
- 通过将 href 与 javascript 匹配来删除 dom 元素
- 如何从指令中查找和删除 DOM 元素
- 如何删除 DOM 就绪处理程序,以便可以触发 Javascript 函数
- DOM 元素 dblclick 事件在删除 dom 元素时单击事件后更改