使用函数内的MutationObserver监视文档

时间:2018-10-04 13:29:52

标签: javascript dom scope mutation-observers

背景

我想遍历分页的Ajax表,并提取一些在交换后备图像之前存在的图像src属性,并将它们存储在数组中。虽然我可以使用全局MutationObserver轻松监视对属性的更改,但我只想在用户单击特定按钮时才开始将其存储在目标数组中。单击时,我将遍历表,将变异的src属性存储在数组中,然后在过程完成后停止存储,因此用户可以自由地手动遍历表,而无需进一步修改数组。

问题

是否可以在函数内部初始化MutationObserver?如果是这样,我在下面的玩具示例中出了什么问题,它没有返回我期望的变异对象数组?似乎从未调用过cb

function test() {
    var a = [];
    colors = ['yellow', 'blue', 'red'];

    var cb = function(mutations, observer) {
        for (var mutation of mutations) {
            console.log('In mutations loop:', a);
            console.log(mutation);
            // Here I would pull out the img src attribute
            a.push(mutation);
        }
    };

    var observer = new MutationObserver(cb);

    observer.observe(document, {
        attributes: true, 
        attributeOldValue: true,
        childList: true, 
        subtree: true
    });

    for (var i=0; i < colors.length; i++) {
        // For my motivating problem this loop would click through
        // the table, triggering img src mutations.  
        console.log(colors[i]);
        document.body.style.cssText = 'background:' + colors[i] + ';';	
    }

    observer.disconnect();

    console.log('a:', a);
    return(a);
}

test()

0 个答案:

没有答案