【问题标题】:MutationObserver listen even if was never called即使从未调用过 MutationObserver 也会监听
【发布时间】:2020-09-11 07:22:30
【问题描述】:

我正在编写一个外部脚本。我需要在每 30 秒清除一次的部分中添加一些元素。所以我绑定了MutationObserver,它会在内容被擦除后恢复。在测试时,我注意到我的MutationObserver 工作正常,即使我从不给他打电话。

这是我创建元素的代码:

function moveFilters(){
   if($("#new-filter-place").length == 0){
       $("<h1 id='new-filter-place'>TEST</h1>").insertAfter($('#category-top10'));
       observeFilters();
   }
}

这是我的观察员:

function observeFilters(){
    console.log('test');
    var target = document.querySelector("#new-filter-place");
    var observer = new MutationObserver(function(mutations){
        mutations.forEach(function(mutation){
            var nodes = Array.from(mutation.removedNodes);
            var directMatch = nodes.indexOf(target) > -1;
            var parentMatch = nodes.some(parent => parent.contains(target));
            if(directMatch || parentMatch){
                observer.disconnect();
                moveFilters();
        }
    });
})
var config = {
    subtree: true,
    childList: true
};
    observer.observe(document.body, config);
}

我从来没有调用函数moveFilters 也没有调用observeFilters,所以页面上没有id为“new-filter-place”的元素,但是当其他元素被擦除时会触发观察者。

有人可以向我解释当我从不调用该函数时如何触发它?

【问题讨论】:

  • 唯一的解释是你实际调用它。

标签: javascript mutation-observers


【解决方案1】:

好的,经过数小时的调试,我找到了它。其他程序员写了其他脚本,所以基本上他调用了那个脚本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-08-02
    • 2016-09-17
    • 2021-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多