MutationObserver的范围变更跟踪

时间:2019-01-21 12:26:25

标签: javascript mutation-observers

JavaScript的MutationObserver的语义有些奇怪:

它不会记录所有更改,而是记录所有更改并在事件循环中安排一个回调调用(即,您在回调调用期间看不到堆栈跟踪中的更改代码)。

在很多情况下肯定很方便,但是我该如何区分第三方代码对DOM所做的更改与我自己所做的更改?

如果回调被内联调用,则可以这样做:

inModification = true
<do some changes>
inModification = false

显然这现在不起作用,因为没有在分配之间调用回调。所以我必须这样写:

setTimeout(() => inModification = false)
<do some changes>
inModification = true

但是

  1. 该代码看起来很神秘,而且
  2. 我什至不确定所有浏览器中的隐式调度顺序是否得到保证。

这是我能做的最好的吗?

0 个答案:

没有答案