style removeattribute remove eliminar attribute atributos atributo agregar javascript jquery css

eliminar - removeattribute javascript



jquery-¿Cómo se determina si un div cambia su altura o cualquier atributo css? (4)

Otro simple ejemplo.

Para esta muestra, podemos usar 100x100 DIV-box:

<div id="box" style="width: 100px; height: 100px; border: solid 1px red;"> Red box contents here... </div>

Y un pequeño truco jQuery:

<script type="text/javascript"> jQuery("#box").bind("resize", function() { alert("Box was resized from 100x100 to 200x200"); }); jQuery("#box").width(200).height(200).trigger("resize"); </script>

Pasos:

  1. Creamos el elemento de bloque DIV para cambiar el tamaño de las operaciones
  2. Agregue código JavaScript simple con:
    • jQuery bind
    • El ajustador de jQuery con acción de disparo "redimensionar" - el disparador es lo más importante en mi ejemplo
  3. Después de cambiar el tamaño, puede consultar la información de alerta de un navegador

Eso es todo. ;-)

Quiero saber cómo desencadenar un evento cuando un div cambia su altura o cualquier atributo css.

Tengo un div con id = mainContent . Quiero que jquery active automáticamente un evento cuando cambie su altura. Hice algo como esto:

$("#mainContent").change(''height'', function() { $("#separator").css(''height'', $("#mainContent").height()); });

Sé que está mal.

Aquí está mi código completo (pegué todo porque no puedo entrar en jsfiddle por alguna razón que no sé):

<html> <head> <style type="text/css"> html, body { width: 100%; height: 100%; margin: 0; padding: 0; } #separator { border-right: 1px solid black; } </style> <script type="text/javascript" src="jquery1.6.4min.js"> </script> <script type="text/javascript"> $(document).ready(function() { $("#separator").css(''height'', $("body").height()); }); $(function() { $("#btnSample1").click(function() { $("#mainContent").css(''height'', ''400px''); $("#mainContent").css(''width'', ''600px''); $("#mainContent").css(''background-color'', ''#F0F0F0''); }); $("#btnSample2").click(function() { $("#mainContent").css(''height'', ''1600px''); $("#mainContent").css(''width'', ''700px''); $("#mainContent").css(''background-color'', ''#F0F0F0''); }); $("#mainContent").change(''height'', function() { $("#separator").css(''height'', $("#mainContent").height()); }); }); </script> </head> <body> <table style="width: 100%;"> <tr> <td valign="top" style="width: 19%;"> <table id="mainMenu"> <tr><td><input id="btnSample1" type="button" value="Sample 1" /></td></tr> <tr><td><input id="btnSample2" type="button" value="Sample 2" /></td></tr> </table> </td> <td valign="top" style="width: 1%;" > <div id="separator"></div> </td> <td valign="top" style="width: 80%;"> <div id="mainContent"></div> </td> </tr> </table> </body> </html>

Estoy intentando ajustar la altura de div id = separator función de la altura de mainContent siempre que mainContent la altura de mainContent .

PD: En este caso, sé que puedo usar el evento de botón para hacer esto, pero quiero que el div active el evento cuando se cambie la altura. Por favor ayuda. Gracias por adelantado.


Por el bien del futuro, publicaré esto. Si no necesita soportar <IE11, entonces debe usar MutationObserver.

Aquí hay un enlace al caniuse js MutationObserver

Uso simple con resultados potentes.

var observer = new MutationObserver(function (mutations) { //your action here }); //set up your configuration //this will watch to see if you insert or remove any children var config = { subtree: true, childList: true }; //start observing observer.observe(elementTarget, config);

Cuando ya no necesite observar más simplemente desconecte.

observer.disconnect();

Consulte la documentación de MDN para obtener más información


Por favor no use las técnicas descritas en otras respuestas aquí. No están trabajando con cambios de tamaño de animaciones css3, cambios de diseño flotantes o cambios que no provienen de jQuery land. Puede usar un detector de cambio de tamaño, un enfoque basado en eventos, que no pierde el tiempo de su CPU.

https://github.com/marcj/css-element-queries

Contiene una clase ResizeSensor que puede usar para ese fin.

new ResizeSensor(jQuery(''#mainContent''), function(){ console.log(''main content dimension changed''); });

Descargo de responsabilidad: escribí esta biblioteca


Primero, no hay tal evento css-changes fuera de la caja, pero puede crear uno por su cuenta, ya que onchange is for :input elements only. no para cambios de css.

Hay dos formas de rastrear los cambios en css.

  1. Examine el elemento DOM para los cambios CSS cada x vez (500 milisegundos en el ejemplo).
  2. Dispare un evento cuando cambie el elemento css.
  3. Use el evento de mutación DOMAttrModified . Pero está en deprecated , así que me lo saltearé.

Primera forma:

var $element = $("#elementId"); var lastHeight = $("#elementId").css(''height''); function checkForChanges() { if ($element.css(''height'') != lastHeight) { alert(''xxx''); lastHeight = $element.css(''height''); } setTimeout(checkForChanges, 500); }

Segunda forma:

$(''#mainContent'').bind(''heightChange'', function(){ alert(''xxx''); }); $("#btnSample1").click(function() { $("#mainContent").css(''height'', ''400px''); $("#mainContent").trigger(''heightChange''); //<==== ... });

Si controla los cambios de css, la segunda opción es una forma mucho más elegante y eficiente de hacerlo.

Documentaciones:

  • bind : Description: Attach a handler to an event for the elements.
  • trigger : Description: Execute all handlers and behaviors attached to the matched elements for the given event type.