簡體   English   中英

如何在JavaScript中刪除突變記錄對象

[英]How to delete mutation record objects in javascript

我正在觀察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);

我假設您的變異對象是一個復雜的對象,而不是普通的數據類型,因此您在.remove方法中進行的“ indexOf”檢查不會刪除任何內容。

您應該創建其他方法,例如“ checkForElement”或其他方法。 在這種方法中,您可以決定什么是您的變異對象相等。

在堆棧溢出中已經有解決方案,例如對象數組中的indexOf方法?

您無法中止突變,因為在執行回調時,已經發生了突變。

您可以做的是使用MutationRecord中提供的信息“回滾” 變異 ,特別是您似乎需要關注的addedNodes 您可以簡單地迭代這些,然后為每個節點將其從其父節點中刪除:

if(node.parentNode) {
  node.parentNode.removeChild(node);
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM