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
});
添加回答
举报