DOM节点变化监听MutationObserver(节点、属性、子节点。。变动)

DOM规范的MutationObserver()构造函数 - 是MutationObserver接口内容的一部分 - 创建并返回一个新的观察者,它在DOM事件触发时调用指定的回调函数。DOM的观察不会立即启动;而必须先调用observe() 方法来确定要监听哪一部分的DOM以及要注意哪些更改。

function callback (mutationList, observer) {
    mutationList.forEach((mutation) => {
      switch (mutation.type) {
        case 'childList':
          /* 从树上添加或移除一个或更多的子节点;参见 mutation.addedNodes 与
             mutation.removedNodes */
          break
        case 'attributes':
          /* mutation.target 中某节点的一个属性值被更改;该属性名称在 mutation.attributeName 中,
             该属性之前的值为 mutation.oldValue */
          break
      }
    })
  }

  let targetNode = document.querySelector('#someElement') // 获取监听 DOM 对象
  let observerOptions = {
    childList: true, // 观察该元素的子元素新增或者删除
attributes: true, // 观察属性变动
subtree: true, //该元素的所有子元素新增或者删除
characterData: true, // 监听text或者comment变化
attributeOldValue: true, //属性原始值
characterDataOldValue: true
}
  let observer = new MutationObserver(callback)
  observer.observe(targetNode, observerOptions)

  // 操作
  let dom = document.createElement('li')
  setTimeout(() => {
    targetNode.appendChild(dom) // 触发 childList
  }, 1000)
  setTimeout(() => {
    targetNode.style.color = 'red' // 触发 attributes
  }, 2000)

 

posted @ 2022-08-31 11:17  40度丶仰望  阅读(394)  评论(0编辑  收藏  举报