Почему событие DOMSubtreeModified не рекомендуется на уровне 3 DOM? - PullRequest
49 голосов
/ 12 июля 2011

Почему событие DOMSubtreeModified устарело и что мы должны использовать вместо него?

Ответы [ 2 ]

48 голосов
/ 12 июля 2011

Если вы прокрутите немного вниз , вы увидите:

Внимание! Интерфейс MutationEvent был представлен в DOM Level 2 События, но еще не были полностью и совместимо реализованы через пользовательских агентов. Кроме того, была критика, что Интерфейс, как и задумано, представляет производительность и реализацию вызов. Новая спецификация находится в стадии разработки с целью обращаясь к случаям использования, которые решают события мутации, но в более исполнительная манера. Таким образом, эта спецификация описывает события мутации для справки и полноты унаследованного поведения, но не одобряет использование интерфейса MutationEvent и MutationNameEvent интерфейс.

API замены - наблюдатели мутаций , которые полностью определены в стандарте жизни DOM , который заменяет всю глупость DOM уровня X.

20 голосов
/ 24 сентября 2013

Я думаю, что замена будет наблюдателей мутаций: 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);
...