相关疑难解决方法(0)

DOMNodeRemovedFromDocument的简单MutationObserver版本

我将一些功能附加到DOM元素,并希望能够在从DOM中删除元素时清除所有引用,以便可以对其进行垃圾回收,

我检测元素removel的初始版本是这样的:

var onremove = function(element, callback) {
    var destroy = function() {
        callback();
        element.removeEventListener('DOMNodeRemovedFromDocument', destroy);
     };
     element.addEventListener('DOMNodeRemovedFromDocument', destroy);
};
Run Code Online (Sandbox Code Playgroud)

然后我读到变异事件被弃用而支持MutationObserver.所以我试着移植我的代码.这就是我想出的:

 var isDescendant = function(desc, root) {
     return !!desc && (desc === root || isDecendant(desc.parentNode, root));
 };

var onremove = function(element, callback) {
    var observer = new MutationObserver(function(mutations) {
        _.forEach(mutations, function(mutation) {
            _.forEach(mutation.removedNodes, function(removed) {
                if (isDescendant(element, removed)) {
                    callback();

                    // allow garbage collection
                    observer.disconnect();
                    observer = undefined;
                }
            });
        });
    });
    observer.observe(document, {
         childList: true, …
Run Code Online (Sandbox Code Playgroud)

javascript dom

8
推荐指数
1
解决办法
1785
查看次数

标签 统计

dom ×1

javascript ×1