Javascript 通过回调函数改变突变观察者-DOM

Javascript 通过回调函数改变突变观察者-DOM,javascript,dom,mutation-observers,Javascript,Dom,Mutation Observers,有没有一种方法,如何强制变异观察者忽略回调函数引起的DOM更改 现在我有: var config = { attributes: true, childList: true, characterData: true }; var target = document.body; var timer; // create an observer instance var observer = new MutationObserver(function(mutations) { // fir

有没有一种方法,如何强制变异观察者忽略回调函数引起的DOM更改

现在我有:

var config = { attributes: true, childList: true, characterData: true };
var target = document.body;
var timer;

// create an observer instance
var observer = new MutationObserver(function(mutations) {

   // fired when a mutation occurs
   timer = setTimeout(function () {

      _3rd_party_callback();


   }, 500);  

});

observer.observe(target, config);
问题是,
\u第三方\u回调
回调导致DOM更改,所以它永远不会停止。正如它的名字所说,它是第三方函数,我不能更改(实际上,它的目的是操纵DOM)

所以我要做的是在回调函数调用之前和之后分别断开和启动observer

  observer.disconnect()
  _3rd_party_callback();
  observer.observe(target, config);
这似乎是可行的,但我担心,由于事件的异步处理,我可能会禁用观察器,而其他更改则会被取消


不太可能有办法将更改与页面本身和回调分开,但我会尝试一下。

如果
observer
观察
目标,而其他什么都不观察,你的想法就会奏效。这不是一个特别有效的解决方案,因为每次重置可观察对象时,您都必须再次设置挂钩,但它会起作用

observer.disconnect()
_3rd_party_callback();
observer.observe(target, config);
由于主事件循环中发生的所有DOM更改,您没有可能错过由
\u第三方\u cb
之外的任何内容引起的事件。因此,您断开了观察者的连接,调用第三方代码,然后重新连接它——DOM在这两者之间没有任何改变。但是,如果第三方代码延迟更改,例如,
setTimeout(messupthedom,0)
您仍然会在您的可观察数据中获取这些更改