美文网首页
MutationObserver

MutationObserver

作者: 绝尘kinoko | 来源:发表于2021-05-13 16:52 被阅读0次

    今天在看vue源码nextTick实现部分发现如下代码

    let counter = 1
    const observer = new MutationObserver(flushCallbacks)
    const textNode = document.createTextNode(String(counter))
    observer.observe(textNode, {
      characterData: true
    })
    timerFunc = () => {
      counter = (counter + 1) % 2
      textNode.data = String(counter)
    }
    

    判断可用MutationObserver的情况下赋予timerFunc实体
    看了MDN后大概知道是怎么异步执行的,但是其中config部分不是很明白,文档没有解释,只有三个枚举。
    首先是自己测试

    function fn (mutationsList, observer) {
      console.log(mutationsList, observer)
    }
    let ob = new MutationObserver(fn)
    let text = document.createTextNode('1')
    ob.observe(text, {
      characterData: true
    })
    // trigger
    text.data = '2'
    

    console结果

    console.png
    因为我没有对dom结构操作,所以关心的还是type,只知道修改TextNode.data属于characterData改动。
    测试无果,百度如下:
    MutationObserver Config
    • childList:
      添加、删除目标节点的子节点时会收到通知(子节点的后代节点添加或删除时不会收到通知)
    • attribute:
      修改目标节点属性时会收到通知
    • characterData:
      观察目标节点下所有文本类型节点(即子代或后代)的文字变化(注意:添加、删除文本节点不会被观察到,如果改变之前的类型不是文本节点也不会被观察到),该属性只能配合subtree使用。
    • subtree:
      目标节点或后代节点变更时都会触发,必须配合其他属性一起使用
    • attributeOldValue:
      如果属性为true或者省略,则相当于设置为true,表示需要记录改变前的目标属性值,设置了attributeOldValue可以省略attributes设置
    • characterDataOldValue:
      如果characterData为true或省略,则相当于设置为true,表示需要记录改变之前的目标数据,设置了characterDataOldValue可以省略characterData设置
    • attributeFilter:
      attributes设置为true或者被忽略时可以自定义需要观察的属性名称数组
      更详细内容可参考:
      https://www.cnblogs.com/94pm/p/11196423.html

    相关文章

      网友评论

          本文标题:MutationObserver

          本文链接:https://www.haomeiwen.com/subject/wklxjltx.html