Why is the DOMSubtreeModified event deprecated in DOM level 3?

JavascriptDomDom EventsDeprecatedDom3

Javascript Problem Overview


Why is the DOMSubtreeModified event deprecated and what are we supposed to use instead?

Javascript Solutions


Solution 1 - Javascript

If you http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents">scroll down a bit, you see:

> Warning! The MutationEvent interface was introduced in DOM Level 2 > Events, but has not yet been completely and interoperably implemented > across user agents. In addition, there have been critiques that the > interface, as designed, introduces a performance and implementation > challenge. A new specification is under development with the aim of > addressing the use cases that mutation events solves, but in more > performant manner. Thus, this specification describes mutation events > for reference and completeness of legacy behavior, but deprecates the > use of both the MutationEvent interface and the MutationNameEvent > interface.

The replacement API is mutation observers, which are fully specified in the DOM Living Standard that supercedes all of the DOM level X silliness.

Solution 2 - Javascript

I think the replacement will be mutation observers: 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);

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionhuyzView Question on Stackoverflow
Solution 1 - JavascriptDomenicView Answer on Stackoverflow
Solution 2 - JavascriptralfthewiseView Answer on Stackoverflow