Tengo un div que tiene su contenido cambiando todo el tiempo, ya sea ajax requests
, jquery functions
, blur
etc, etc.
¿Hay alguna manera de detectar cualquier cambio en mi div en cualquier momento?
No quiero usar ningún intervalo o valor predeterminado marcado.
Algo como esto haría
$('mydiv').contentchanged() {
alert('changed')
}
keypress
evento a un<div>
elemento contento . No estoy seguro de que las soluciones allí se apliquen a esto. Definitivamente no recogerían ningún cambio programático en el contenido de un elemento.Respuestas:
Si no desea usar el temporizador y verificar innerHTML, puede probar este evento
Más detalles y datos de soporte del navegador están aquí .
Atención: en las versiones más nuevas de jQuery, bind () está en desuso, por lo que debe usar on () en su lugar:
fuente
$("body").on('DOMSubtreeModified', "mydiv", function() { });
Usando Javascript MutationObserver
fuente
Como
$("#selector").bind()
está en desuso , debe usar:fuente
#
para indicar que el símbolo debe ir antes que el selector.Puedes probar esto
pero esto podría no funcionar en Internet Explorer, no lo he probado
fuente
clearTimeout(window.something); window.something = setTimeout(...);
Estás buscando MutationObserver o Mutation Events . Tampoco son compatibles en todas partes ni son vistos con demasiado cariño por el mundo desarrollador.
Si sabe (y puede asegurarse de que) el tamaño del div cambiará, es posible que pueda usar el evento de cambio de tamaño de crossbrowser .
fuente
El siguiente código funciona para mí.
Espero que ayude a alguien :)
fuente
No hay una solución incorporada a este problema, este es un problema con su diseño y patrón de codificación.
Puede usar el patrón editor / suscriptor. Para esto, puede usar eventos personalizados jQuery o su propio mecanismo de eventos.
Primero,
Ahora puede suscribirse divhtmlchanging / divhtmlchanged events de la siguiente manera,
Ahora, tienes que cambiar tus cambios de contenido div a través de esto
changeHtml()
función. Por lo tanto, puede supervisar o hacer los cambios necesarios en consecuencia porque enlaza el argumento de datos de devolución de llamada que contiene la información.Tienes que cambiar el html de tu div de esta manera;
Y también, puede usar esto para cualquier elemento html excepto el elemento de entrada. De todos modos, puede modificar esto para usarlo con cualquier elemento (s).
fuente
Use MutationObserver como se ve en este fragmento proporcionado por Mozilla y adaptado de esta publicación de blog
Alternativamente, puede usar el ejemplo de JQuery que se ve en este enlace
Chrome 18+, Firefox 14+, IE 11+, Safari 6+
fuente
Puede almacenar el antiguo innerHTML del div en una variable. Establezca un intervalo para verificar si el contenido anterior coincide con el contenido actual. Cuando esto no sea cierto, haz algo.
fuente
Prueba el MutationObserver:
soporte del navegador: http://caniuse.com/#feat=mutationobserver
fuente
Agregar algún contenido a un div, ya sea a través de jQuery o mediante DOM-API directamente, el valor predeterminado es la
.appendChild()
función. Lo que puede hacer es anular la.appendChild()
función del objeto actual e implementar un observador en él. Ahora que.appendChild()
hemos anulado nuestra función, necesitamos tomar prestada esa función de otro objeto para poder agregar el contenido. Por lo tanto, llamamos al.appendChild()
de otro div para finalmente agregar el contenido. Por supuesto, esto también cuenta para el.removeChild()
.Aquí puedes encontrar un ejemplo ingenuo. Puede extenderlo usted mismo, supongo. http://jsfiddle.net/RKLmA/31/
Por cierto: esto muestra que JavaScript cumple con el principio OpenClosed. :)
fuente