DOM 突变侦听器就像它听起来的那样——它侦听 DOM 的突变。例如,如果您附加这样的侦听器,然后添加或删除节点,则侦听器可能能够检测到它并触发回调。可以观察各种类型的 DOM 突变。
例如一个同步的例子(它很慢,不推荐使用,不推荐):
container.addEventListener('DOMNodeInserted', () => {
console.log('mutation seen!');
});
container.insertAdjacentHTML('beforeend', 'content');
<div id="container"></div>
对于此类功能,建议您改用 MutationObserver,这不是同步的 - MutationObserver 回调在突变后的微任务期间运行:
new MutationObserver(() => {
console.log('mutation seen!');
}).observe(container, { childList: true });
container.insertAdjacentHTML('beforeend', 'content');
<div id="container"></div>
当您需要与无法更改的代码的功能进行交互时,变异观察器通常是正确的选择 - 例如,如果您正在使用更改 DOM 中某些内容的脚本或库,并且您需要能够检测何时发生更改,但您无法修改源脚本,并且该脚本不提供任何外部可见的指示表明发生了此类更改。
除了那种(不寻常的)情况外,通常有更好的方法来对更改做出react,例如在更改 DOM 的函数完成后调用函数。