删除DOM节点时进行检测
Detect when a DOM node is removed?
我正在尝试编写一个指令,该指令将确保在任何给定时间只有一个元素保持活动状态。
指令:showOnlyOne描述:连接到一个dom节点,并确保一次只能看到一个附加了此指令的dom节点
用法:
<body>
<div id="one" show-only-one></div>
<section>
<div id="two" show-only-one></div>
</section>
</body>
在这种情况下,显示的将是"两个"。。。现在想象一下,由于一个外部事件,section元素得到了一个jqLite.remove()调用。现在我如何检测到"两个"已经被删除,然后重新激活"一个",以便显示它?
angular.module('SWS')
.directive('swsOnlyOne', ['$log', '$interval', function($log, $interval) {
var billies = [];
return function(scope, elem, attrs) {
if (billies.length > 0) {
_.each(billies, function(b) {
b.css('visibility', 'hidden');
});
}
elem[0].addEventListener('DOMNodeRemoved', function(ev) {
// THIS DOM EVENT WILL NEVER FIRE...
if ('hidden' != elem.css('visibility')) {
billies.splice(billies.indexOf(elem), 1);
billies[billies.length].css('visibility', 'visible');
}
}, false);
billies.push(elem);
};
}]);
使用angular(最佳实践)倾听的方式是使用scope.on("$destroy", fn)
https://docs.angularjs.org/api/ng/type/$rootScope.Scope#$destroy
$scope.on("$destroy", function(event){
// cleanup
});
// but can also be used on elements
elem.on("$destroy", function(event){
// cleanup
});
相关文章:
- 如何在呈现页面后使用 Java 脚本检测 dom 元素值的值是否有任何变化(例如,任何输入或复选框值更改)
- 使用突变观测器检测添加到DOM的元素
- 突变观察者未能检测到元素's删除dom
- 如何检测正在从dom元素中添加/删除的元素
- Angular2指令:如何检测DOM变化
- 如何检测 DOM 属性中的更改
- 检测新的 DOM 元素和对输入框的更改 - JQuery
- 如何在不使用 DOM 突变事件的情况下检测 AJAX 节点插入
- Web 套接字 DOM 对象检测
- 检测 DOM 对象是否可以放置在 SPAN 中
- 检测 DOM 元素的父元素何时更改
- 如何使用jQueryUI-Sortable检测DOM中的更改
- 使用纯Javascript检测DOM元素的位置变化
- 检测DOM元素中的属性更改
- 如何检测DOM和框架何时加载到Facebook应用程序中
- 检测DOM何时被卸载
- 如何检测DOM元素的class属性何时发生变化
- 如何在没有jQuery的情况下检测DOM元素的变化
- 检测DOM XSS攻击
- 如何检测DOM-draggables和FabricJS形状之间的碰撞