异常处理:回调中抛出的异常不会中断观察者的运行。
function callback(mutations) { console.log('变更:', mutations.flatMap(m => [...m.addedNodes].map(n => n.nodeValue))); throw '回调中的异常'; } const observer = new MutationObserver(callback); observer.observe(root, { childList: true }); setTimeout(() => console.log('前置宏任务')); Promise.resolve().then(() => console.log('前置微任务')); for (let i = 0; i < 3; i++) { const text = `节点${i}; `; root.append(text); console.log('已添加: ' + text); } // 堆代码 duidaima.com setTimeout(() => console.log('后置宏任务')); Promise.resolve().then(() => console.log('后置微任务'));运行结果分析:
4.回调中抛出的异常不影响后续操作。
function contentObserver(mutations) { for (let mutation of mutations) { if (mutation.type === 'childList') { mutation.addedNodes.forEach(node => { if (node.nodeType === Node.ELEMENT_NODE && node.classList.contains('dynamic-content')) { processNewContent(node); } }); } } } const observer = new MutationObserver(contentObserver); observer.observe(document.body, { childList: true, subtree: true }); function processNewContent(node) { // 处理新加载的内容 console.log('处理新内容:', node); } // 模拟动态加载内容 setTimeout(() => { const newContent = document.createElement('div'); newContent.classList.add('dynamic-content'); newContent.textContent = '新加载的内容'; document.body.appendChild(newContent); }, 1000);这个例子展示了如何使用MutationObserver监控动态加载的内容,并在新内容添加时进行处理。