修改元素文本导致的 MutationObserver 无限回调
MutationObserver infinite callbacks caused by modifying element text
我有一个脚本可以监视 DOM 由第 3 方库脚本进行的操作。我想更新元素文本 属性。但是,在某些情况下,当我尝试将字符串附加到现有文本时(比如说 elm.textContent +=“文本”),我得到了无限的回调周期。
我想将文本附加到 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;
}
这些解决方案远非理想,根本原因是你正在与变异观察者一起做这件事。理想情况下,库只会生成正确的文本。
我有一个脚本可以监视 DOM 由第 3 方库脚本进行的操作。我想更新元素文本 属性。但是,在某些情况下,当我尝试将字符串附加到现有文本时(比如说 elm.textContent +=“文本”),我得到了无限的回调周期。
我想将文本附加到 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;
}
这些解决方案远非理想,根本原因是你正在与变异观察者一起做这件事。理想情况下,库只会生成正确的文本。