Mutation Observer 是 JavaScript 中用于监视 DOM 树变化的强大 API。它提供了一种高效的方式来监听对 DOM 树所做的更改,并在这些更改发生时执行回调函数。
// 创建一个观察器实例
const observer = new MutationObserver(function(mutations) {
mutations.forEach(function(mutation) {
console.log('DOM 发生了变化:', mutation);
});
});
// 配置观察选项
const config = {
attributes: true,
childList: true,
subtree: true
};
// 选择要观察的目标节点
const target = document.querySelector('#target-element');
// 开始观察目标节点
observer.observe(target, config);
// 停止观察
// observer.disconnect();
Mutation Observer 的配置对象可以包含以下属性:
true 以监视目标节点子节点的添加或删除true 以监视目标节点属性的变化true 以记录属性更改前的值true 以监视文本内容的变化true 以记录文本更改前的值true 以将监视扩展到目标节点的所有后代回调函数接收的 mutations 参数是一个 MutationRecord 对象数组,每个对象包含以下属性:
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.type === 'attributes') {
console.log(`属性 ${mutation.attributeName} 已更改`);
}
});
});
observer.observe(document.getElementById('myElement'), {
attributes: true
});
const observer = new MutationObserver((mutations) => {
mutations.forEach((mutation) => {
if (mutation.addedNodes.length > 0) {
console.log('添加了节点:', mutation.addedNodes);
}
if (mutation.removedNodes.length > 0) {
console.log('移除了节点:', mutation.removedNodes);
}
});
});
observer.observe(document.getElementById('container'), {
childList: true
});
const observer = new MutationObserver((mutations) => {
console.log('DOM 子树发生了变化');
});
observer.observe(document.documentElement, {
childList: true,
subtree: true
});
Mutation Observer 替代了已废弃的 MutationEvent,具有以下优势:
Mutation Observer 是现代 Web 应用中监视 DOM 变化的首选方法,特别适合动态内容加载、单页应用和需要响应 DOM 变化的库或框架。
热门推荐:
0