Necesito un mecanismo eficiente para detectar cambios en el DOM. Preferiblemente navegador cruzado, pero si hay medios eficientes que son no navegador cruzado, puedo implementar estos con un método de navegador cruzado a prueba de fallas.¿El método más eficiente para detectar/monitorear cambios DOM?
En particular, necesito detectar los cambios que afectarían el texto en una página, por lo que cualquier elemento nuevo, eliminado o modificado, o cambios en el texto interno (innerHTML) serían necesarios.
No tengo control sobre los cambios que se están realizando (pueden deberse a Javascript incluido por terceros, etc.), por lo que no se puede abordar desde este ángulo. De alguna manera, necesito "monitorear" los cambios.
Actualmente he implementado un método "quick'n'dirty" que comprueba body.innerHTML.length
a intervalos. Esto, por supuesto, no detectará cambios que den como resultado que se devuelva la misma longitud, pero en este caso es "suficientemente bueno": las posibilidades de que esto ocurra son extremadamente escasas, y en este proyecto, no detectar un cambio no resultará en datos perdidos El problema con body.innerHTML.length
es que es costoso. Puede tomar entre 1 y 5 milisegundos en un rápido navegador, y esto puede atascar mucho las cosas - También estoy lidiando con un gran número de iframes y todo suma. Estoy bastante seguro de que el costo de hacerlo es porque el texto innerHTML no está almacenado estáticamente por los navegadores, y debe calcularse desde el DOM cada vez que se lee.
Los tipos de respuestas que estoy buscando son cualquier cosa, desde el "preciso" (por ejemplo, el evento) al "suficientemente bueno" - tal vez algo tan "rápido" como el método innerHTML.length, pero que se ejecuta más rápido.
EDIT: También cabe señalar que, si bien sería "agradable" para detectar el elemento precisa que ha sido modificado, no es una necesidad absoluta - sólo el hecho de que ha habido cualquier cambio sería suficientemente bueno. Con suerte, esto amplía las respuestas de las personas. Voy a investigar los eventos de mutación, pero todavía necesito un respaldo para el soporte de IE, por lo que cualquier idea extravagante, creativa y fuera de la plaza sería muy bienvenida.
No tuve mucha suerte la última vez que se me preguntó esto: http://stackoverflow.com/questions/648996/how-do-i-monitor-the-dom-for-changes –
Sí, lo vi y estás correcto ... no mucha suerte. * Sin embargo *, porque no necesito el 100% de precisión, y también porque no necesito identificar qué elemento ha cambiado, solo que * ha habido * un cambio, espero que las personas presenten algunas soluciones creativas para mí ... – Graza
Posible duplicado de [¿Hay un detector de cambios DOM de JavaScript/jQuery?] (https://stackoverflow.com/questions/2844565/is-there-a-javascript-jquery-dom-change-listener) – Makyen