<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
* {
font-size: 28px;
}
</style>
</head>
<body>
<div id="container">
</div>
<div>
<button type="button" id="btnAdd">添加子节点</button>
</div>
<script>
const containerEl = document.getElementById('container');
// 观察器的配置(需要观察什么变动)
const config = { attributes: true, childList: true, subtree: true };
// 当观察到变动时执行的回调函数
const callback = function (mutationsList, observer) {
// Use traditional 'for loops' for IE 11
for (let mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log(`A child node has been added or removed. ${performance.now()}`);
}
else if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}
}
};
// 创建一个观察器实例并传入回调函数
const observer = new MutationObserver(callback);
// 以上述配置开始观察目标节点
observer.observe(containerEl, config);
btnAdd.onclick = function () {
setTimeout(function () {
console.log("setTimeout callback:", performance.now());
});
containerEl.append(`added node: ${performance.now()}`);
}
</script>
</body>
</html>