2012-06-20 15 views
13

Puede parecer una pregunta trivial, pero me he encontrado con un problema al usar jQuery. Cuando trato de obtener la altura para un elemento dentro de una lista. Siempre me dan cero.jquery .derecha y altura del elemento

$(function() { 
    $('#my-elem').height() // Always gives me zero. 
}); 

Si pongo el código en un retraso con setTimeout() alrededor de la comprobación de la altura (digamos de .5s) entonces la altura se informa correctamente de nuevo a mí. Supongo que esto se debe a que los estilos aún no se han podido aplicar.

La única solución que he encontrado para este problema es usar un intervalo para sondear la altura del elemento hasta que se vuelva distinto de cero, pero esto me parece exagerado. ¿Hay una mejor manera?

+0

# my-elem es div, span, img o lo que –

+0

¿Está oculto el elemento y luego se muestra? Pruebe con el evento '$ (window) .load()' que se dispara un poco más tarde que docready. – elclanrs

+0

Muéstranos el HTML y también un violín, si es posible. – Starx

Respuesta

21

El evento document.ready indica que el HTML DOM está listo para acceder a través de Javascript, pero eso no significa que los elementos ya hayan procesado.

De hecho, eso es todo el asunto detrás ready: es un medio para que pueda empezar la manipulación de documento HTML DOM sin tener que esperar a que la página termine de cargarse. Es seguro asumir que al document.ready, sus elementos aún no se muestran en la página.

Ahora, eso viene con una advertencia: si los elementos aún no se han procesado, ¿cómo puede saber el navegador/Javascript cuál es su altura de resolución? .height() puede dar cero en document.ready debido a esto. Probablemente sea mejor esperar hasta load en lugar de ready cuando se trata de extraer las dimensiones de la caja del diseño.

+0

Creo _ la mayoría de las veces (si no todas las veces) _ debe leerse como _en raras ocasiones_ –

+0

Estaba hablando por experiencia, pero permítanme reformular eso para ser más genérico. –

Cuestiones relacionadas