Javascript 修改元素文本导致的MutationObserver无限回调

Javascript 修改元素文本导致的MutationObserver无限回调,javascript,html,dom,dom-events,mutation-observers,Javascript,Html,Dom,Dom Events,Mutation Observers,我有一个脚本,它监视由第三方库脚本进行的DOM操作。我想更新元素文本属性。然而,在某些情况下,当我尝试将字符串附加到现有文本(比如elm.textContent+=“text”)时,我得到了无限的回调周期 我想在elm.textContent中添加文本。如果您对此有任何帮助,我们将不胜感激 const config = { childList: true, subtree: true }; const callback = function(mutationsList, observer) {

我有一个脚本,它监视由第三方库脚本进行的DOM操作。我想更新元素文本属性。然而,在某些情况下,当我尝试将字符串附加到现有文本(比如elm.textContent+=“text”)时,我得到了无限的回调周期

我想在elm.textContent中添加文本。如果您对此有任何帮助,我们将不胜感激

const config = { childList: true, subtree: true };
const callback = function(mutationsList, observer) {
    for(const mutation of mutationsList) {
        console.log(mutation.);
        var elms = document.querySelectorAll(".FAxxKc");
        for(var elm of elms) {
            elm.textContent = elm.textContent + "TEXT"; // this causes infinite loop.
            // elm.textContent = "TEXT"; // works as expected.

        }
    }
};

const observer = new MutationObserver(callback);
// Start observing the target node for configured mutations
var div = document.getElementById("YPCqFe");
observer.observe(div, config);

当然,这会导致无限循环

你倾听变化,当某些事情发生变化时,你会产生另一个变化

在更改侦听器中,您需要决定必须忽略所做的更改。有几种方法可以做到这一点。在这种情况下,您可以检查它是否以
“TEXT”
结尾,这是否合理取决于您的情况

您也可以在进行更改后下次进入更改侦听器时忽略。即:

let iMageChange = false;
callback = function(mutationsList, observer) {
    if (iMadeChange === true) {
        elm.textContent = elm.textContent + "TEXT";
        iMadeChange = true;
    }
    iMadeChange = false;
}

这些解决方案远非理想,根本原因是你在用突变观察者做这件事。理想情况下,该库只生成正确的文本。

您是否检查了该选项是否回答了您的问题@苏拉乔,谢谢,我做了,但我需要更具体的东西