相关疑难解决方法(0)

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

说我有一个div#parent和我append以及remove使用jquery元素吧.我怎样才能检测到div#parent元素发生这种事件的时间?

html javascript jquery html5

39
推荐指数
2
解决办法
3万
查看次数

JavaScript MutationObserver。在观察父元素后观察子元素不会触发任何事件

鉴于此示例代码:

    function someMethod(elements) {
        
        var observer = new MutationObserver(function(events) {
            
            SomeLib.each(events, function(event, k, i) {
                if ( event.removedNodes ) {
                    SomeLib.each(event.removedNodes, function(removedElement, k, i) {
                        console.log(222, removedElement)                       
                    });
                }
            });
        });
        
        SomeLib.each(elements, function(element, k, i) {
            console.log(111, element)
            
            observer.observe(element, {
                childList    : true,
                subtree      : false
            });
        });
    }
Run Code Online (Sandbox Code Playgroud)

我注意到如果我打电话someMethod(parentElement)然后稍后再打电话someMethod(parentElement.querySelector('someChildElement'))

第一个是唯一触发事件的调用,并且看起来好像第二个调用没有触发任何事件。

不幸的是,因为我最感兴趣的是实际节点被删除时的事件。没有其他的。子节点实际上也不感兴趣,但是选项childList必须data...如此true,所以我猜我是被迫的。

我无法围绕跟踪谁的父级已被跟踪或未被跟踪来组织我的代码,因此我会发现简单地侦听任何特定节点上的删除事件要容易得多,无论它最终以何种方式删除。

考虑到这种困境,我正在考虑MutationObserverdocument元素上注册 a ,而是依赖于检测我希望通过自己的事件处理程序观察自己的元素。

但这真的是我最好的选择吗?

性能显然是值得关注的,因为一切都会触发这个文档监听器,但也许只有一个MutationObserver潜在的高效,因为我只会在检测到感兴趣的元素时触发我自己的函数。

然而,它可能需要在removedNodes和addedNodes上进行迭代,因此它对所有事物都有真正的影响,而不仅仅是我观察节点。

这就引出了一个问题,是否已经注册了一个全局突变观察者?

我真的需要自己手动观察文档吗?

如果其他库也开始在主体元素或子元素上观察类似的情况怎么办?

我不会破坏他们的实施吗?(并不是说我只是有依赖性)但这令人担忧这个实现实际上看起来是多么可怕 …

html javascript dom web

6
推荐指数
0
解决办法
1685
查看次数

标签 统计

html ×2

javascript ×2

dom ×1

html5 ×1

jquery ×1

web ×1