1 回答

TA貢獻(xiàn)1806條經(jīng)驗(yàn) 獲得超5個(gè)贊
MutationObserver可能是您最好的選擇。之前MutationObserver
,有Mutation 事件,但現(xiàn)在已棄用且不推薦使用。
另一個(gè)(可以說是糟糕的)選擇是使用setTimeout
并定期檢查 DOM 的變化。但這將需要您編寫一個(gè)函數(shù)來獲取要檢查的節(jié)點(diǎn)并將當(dāng)前值與舊值進(jìn)行比較。這不會那么有效,因?yàn)榧词箾]有任何更改,您也會每 X 毫秒檢查一次節(jié)點(diǎn)。
您應(yīng)該能夠以不會發(fā)生無限循環(huán)的方式編寫代碼。如果您遇到無限循環(huán),則應(yīng)將該代碼添加到上面的問題中。
就性能而言,因?yàn)?code>MutationObserver會給你舊值和新值,你可以比較這些值而不是遍歷整個(gè) DOM。例如,像這樣:
let observer = new MutationObserver((mutations) => {
? mutations.forEach((mutation) => {
? ? let oldValue = mutation.oldValue;
? ? let newValue = mutation.target.textContent;
? ? if (oldValue !== newValue) {
? ? ? ? // do something
? ? }
? });
});
observer.observe(document.body, {
? characterDataOldValue: true,?
? subtree: true,?
? childList: true,?
? characterData: true
});
添加回答
舉報(bào)