为什么在DOM级别3中不推荐使用DOMSubtreeModified事件?

时间:2011-07-12 04:57:43

标签: javascript dom javascript-events deprecated dom3

为什么DOMSubtreeModified事件deprecated以及我们应该使用什么?

2 个答案:

答案 0 :(得分:48)

如果您scroll down a bit,您会看到:

  

警告! DOM级别2中引入了MutationEvent接口   事件,但尚未完全和互操作地实施   跨用户代理。此外,还有批评说   界面,如设计,介绍了性能和实现   挑战。目前正在制定新的规范   解决突变事件解决的用例,但更多   高效的方式。因此,该说明书描述了突变事件   作为遗留行为的参考和完整性,但弃用了   使用MutationEvent界面和MutationNameEvent   接口

替换API为mutation observers,完全指定in the DOM Living Standard,取代所有DOM级别X愚蠢。

答案 1 :(得分:20)

我认为替换将是变异观察者:https://developer.mozilla.org/en-US/docs/Web/API/MutationObserver

var whatToObserve = {childList: true, attributes: true, subtree: true, attributeOldValue: true, attributeFilter: ['class', 'style']};
var mutationObserver = new MutationObserver(function(mutationRecords) {
  $.each(mutationRecords, function(index, mutationRecord) {
    if (mutationRecord.type === 'childList') {
      if (mutationRecord.addedNodes.length > 0) {
        //DOM node added, do something
      }
      else if (mutationRecord.removedNodes.length > 0) {
        //DOM node removed, do something
      }
    }
    else if (mutationRecord.type === 'attributes') {
      if (mutationRecord.attributeName === 'class') {
        //class changed, do something
      }
    }
  });
});
mutationObserver.observe(document.body, whatToObserve);