变异观察者---子树

bel*_*ace 12 webkit chromium mutation-observers

我正在阅读这篇http://lists.w3.org/Archives/Public/public-webapps/2011JulSep/1622.html,看来Chrome的行为与规范形成鲜明对比.如果我正确理解了规范,则为元素定义"子树"意味着应该报告对该元素的子树(包括元素本身)的更改.但是,在执行这段代码时,我什么都没得到.

var observer = new WebKitMutationObserver(function(e){console.log(e);})
observer.observe(document.body, {subtree:true, attributes:true});
document.body.appendChild(document.createElement('div'));
Run Code Online (Sandbox Code Playgroud)

我错过了什么?有人可以详细说明这个吗?谢谢!

kar*_*nyj 16

文档不清楚,但subtree除非您也指定,否则将被忽略childList:true.

案例attributesattributeFilter是一样的.

希望它仍然有帮助.


小智 7

config中mutationObserver至少需要设置attributescharacterData、 或之一。childListtrue

现在,如果您刚刚设置childList: true,那么它将仅观察目标元素的直接子元素(深度 1),而不是完整的子树。

要观察完整的子树,需要设置childList和。subtreetrue

例如

{
   childList: true,
   subtree: true
}
Run Code Online (Sandbox Code Playgroud)

我希望,这有帮助。


Luk*_*uke 6

根据这篇文章

childList:如果要观察到目标节点的子元素(包括文本节点)的添加和移除,则设置为true。

subtree:如果不仅要观察目标,还要观察目标的后代,则将其设置为true。

这也解释了取决于childList的子树

  • “目标的子元素”和“目标的后代”之间有什么区别? (7认同)
  • 子元素是父对象(深度1)下方的元素。后代是孩子的孩子,因此相对于父母可以有任何深度。 (2认同)