Además de las herramientas "en bruto" proporcionadas por MutationObserver
API , existen bibliotecas de "conveniencia" para trabajar con mutaciones DOM.
Considere: MutationObserver representa cada cambio de DOM en términos de subárboles. Entonces, si está esperando, por ejemplo, que se inserte un determinado elemento, puede estar profundamente dentro de los hijos demutations.mutation[i].addedNodes[j]
.
Otro problema es cuando su propio código, en reacción a las mutaciones, cambia el DOM; a menudo desea filtrarlo.
Una buena biblioteca de conveniencia que resuelve tales problemas es mutation-summary
(descargo de responsabilidad: no soy el autor, solo un usuario satisfecho), que le permite especificar consultas de lo que le interesa y obtener exactamente eso.
Ejemplo de uso básico de los documentos:
var observer = new MutationSummary({
callback: updateWidgets,
queries: [{
element: '[data-widget]'
}]
});
function updateWidgets(summaries) {
var widgetSummary = summaries[0];
widgetSummary.added.forEach(buildNewWidget);
widgetSummary.removed.forEach(cleanupExistingWidget);
}
([{}])
registrada en la consola, que muestra lo esperadoMutationRecord
cuando hago clic en ella. Vuelva a verificar, ya que podría haber sido una falla técnica temporal en JSFiddle. Todavía no lo he probado en IE, ya que no tengo IE 10, que actualmente es la única versión que admite eventos de mutación.