1 回答

TA貢獻1806條經驗 獲得超5個贊
MutationObserver可能是您最好的選擇。之前MutationObserver
,有Mutation 事件,但現在已棄用且不推薦使用。
另一個(可以說是糟糕的)選擇是使用setTimeout
并定期檢查 DOM 的變化。但這將需要您編寫一個函數來獲取要檢查的節點并將當前值與舊值進行比較。這不會那么有效,因為即使沒有任何更改,您也會每 X 毫秒檢查一次節點。
您應該能夠以不會發生無限循環的方式編寫代碼。如果您遇到無限循環,則應將該代碼添加到上面的問題中。
就性能而言,因為MutationObserver
會給你舊值和新值,你可以比較這些值而不是遍歷整個 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
});
添加回答
舉報