Mutation Observer
// Select the node that will be observed for mutationsconst targetNode = document.getElementById('some-id');
// Options for the observer (which mutations to observe)const config = { attributes: true, childList: true, subtree: true };
// Callback function to execute when mutations are observedconst callback = function(mutationsList, observer) {
// Use traditional 'for loops' for IE 11 (goodbye IE11!!!!)for(const mutation of mutationsList) {
if (mutation.type === 'childList') {
console.log('A child node has been added or removed.');
}else if (mutation.type === 'attributes') {
console.log('The ' + mutation.attributeName + ' attribute was modified.');
}}};
// Create an observer instance linked to the callback functionconst observer = new MutationObserver(callback);
// Start observing the target node for configured mutationsobserver.observe(targetNode, config);
// Later, you can stop observingobserver.disconnect();
This is pure gold if you haven’t used it… (from MDN)