web-dev-qa-db-ja.com

DOMSubtreeModifiedイベントがDOMレベル3で非推奨になったのはなぜですか?

なぜDOMSubtreeModifiedイベント 非推奨 であり、代わりに何を使用するのでしょうか?

49
huyz

少しスクロールダウン の場合、以下が表示されます。

警告! MutationEventインターフェースはDOM Level 2 Eventsで導入されましたが、まだユーザーエージェント間で完全かつ相互運用可能に実装されていません。さらに、設計されたインターフェイスがパフォーマンスと実装の課題をもたらすという批判もありました。突然変異イベントが解決するユースケースに対処することを目的とした、より高性能な方法で新しい仕様が開発中です。そのため、この仕様では、レガシーイベントの参照と完全性のためにミューテーションイベントについて説明していますが、MutationEventインターフェイスとMutationNameEventインターフェイスの両方の使用は推奨されていません。

置換APIは mutation observers で、これは完全に指定されています DOM Living Standardで は、DOMレベルXの愚かさをすべて置き換えます。

49
Domenic

置き換えはミューテーションオブザーバーになると思います: 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);
20
ralfthewise