IE11挂起MutationObserver

时间:2018-09-07 16:54:45

标签: javascript jquery internet-explorer-11 mutation-observers

我正在使用MutationObserver检查何时删除了某些节点,并用元素的其他新节点替换了这些节点。

以下代码在Chrome中完全可以正常运行,但是在IE11上它只是挂起。

如果我更改了removeNodes的addingNodes检查,则它可以在IE11上使用。我只是不明白为什么在检查要添加的新节点时为什么挂起。

有什么主意吗?我找不到此问题的任何资源。

var nodeToObserve = document.querySelector('#targetNode');

var callback = function(mutations, observer) {
  for (var index = 0; index < mutations.length; index) {
    var mutation = mutations[index];
    if (mutation.type === 'childList' && mutation.addedNodes.length > 0) {
      console.log(mutation);
      break;
    }

  }
  observer.disconnect();
}
const observer = new MutationObserver(callback);

observer.observe(nodeToObserve, {
  childList: true, // target node's children
  subtree: true // target node's descendants
});
html, body {
  height: 100%;
}

#targetNode {
  border: 1px solid black;
  height: 100%;
}

.childNode {
  //height: 20px;
  background-color: blue;
  margin: 10px;
  padding: 10px;
}

.grandChildNode {
  height: 20px;
  background-color: red;
  margin: 10px;
}
<div id="targetNode">

</div>

1 个答案:

答案 0 :(得分:1)

您不会在index循环中递增for。结果可能会以不同的顺序显示,具体取决于浏览器,因此if语句将在某些浏览器上触发,但在其他浏览器上不会触发。因此,在无限循环b / c中未执行if语句时,系统将挂起。