0

我正在观察一个 Div 元素的变化,该元素被带有 ajax 调用的子 div 填充。我的目标是在观察到的 Record 对象中进行一些检查并过滤其中的一些。如何从观察到的突变列表中删除/删除/过滤这些突变记录?并使它们在网页中过滤。

我试图从突变列表中删除突变记录,但没有奏效。谢谢你的帮助。

Array.prototype.remove = function() {
    var what, a = arguments, L = a.length, ax;
    while (L && this.length) {
        what = a[--L];
        while ((ax = this.indexOf(what)) !== -1) {
            this.splice(ax, 1);
        }
    }
    return this;
};

var observer = new MutationObserver(function (mutations) {
    mutations.forEach(function (mutation) {
        var addedNode = mutation.addedNodes[0];
        if(addedNode){
            var innText = addedNode.innerText;
            //console.log("number " + i + " | " + addedNode.innerText);
            if(innText){
                if(innText.toLowerCase().indexOf(someText) > -1){
                    mutations.remove(mutation);
                }
            }
        }
    });

});

var config = {
    attributes: true,
    childList: true,
    characterData: true,
    characterDataOldValue: true,
    subtree: true
};
observer.observe(text, config);
4

2 回答 2

0

您不能中止突变,因为在执行回调时,突变已经发生。

相反,您可以做的是使用 MutationRecord 中提供的信息“回滚”突变,尤其是addedNodes您似乎关心的信息。您可以简单地迭代这些,并为每个节点将其从其父节点中删除:

if(node.parentNode) {
  node.parentNode.removeChild(node);
}
于 2015-10-13T13:10:32.187 回答
0

我假设您的突变对象是一个复杂的对象,而不是普通的数据类型,因此您在 .remove 方法中的“indexOf”检查不会删除任何内容。

您应该创建一个附加方法,例如“checkForElement”之类的。在该方法中,您可以决定突变对象的相等性。

Stack Overflow 上已经有解决方案,例如对象数组中的 indexOf 方法?

于 2015-10-13T13:06:32.757 回答