MutationObserver在callback函数内调用disconnect()调用

时间:2015-09-02 13:35:49

标签: javascript mutation-observers

我正在使用MutationObserver等待在页面上创建元素,然后在其上添加一个按钮(使用 init 功能)。 但是我只需要添加一个按钮,之后突变就会继续发生。 我想在添加此按钮后disconnect()观察者。

我试过这样的事情:

function detect_node_for_buttons(mutations){
    var selector = 'div[class="_2o3t fixed_elem"]';
    mutations.forEach(function (mutation){
        var element =   $(document).find(selector);
        if (element){
            init();
            observer.disconnect();
            return;
        }
        if (!mutation.addedNodes) return;
        for (var i = 0; i < mutation.addedNodes.length; i++){
            if (mutation.addedNodes[i].matches(selector)){
                init();
                observer.disconnect();
            }
        }
    });
}

var observer = new MutationObserver(function (mutations){
    detect_node_for_buttons(mutations);
});

但它不起作用(也许是因为当我在 detect_node_for_buttons()中调用 observer.disconnect()时尚未定义观察者?)

我该怎么办?

1 个答案:

答案 0 :(得分:3)

MutationObserver中的回调函数使用两个参数调用:mutation数组和observer对象本身。因为你编写代码的方式detect_node_for_buttons永远不会得到观察者对象。这样就可以了:

var observer = new MutationObserver(detect_node_for_buttons);

您还必须将此参数添加到函数声明中:

function detect_node_for_buttons(mutations, observer){ ... }