2012-02-15 27 views
35

Tengo un contenedor (thetext1) con una altura establecida de 360px. "thetext1" contiene dos divs, uno a la izquierda y otro a la derecha, en los cuales el contenido se entrega a través de una llamada ajax.jQuery height() devuelve 0 en un div visible, ¿por qué?

Habrá momentos en que el contenido en uno u otro de estos divs exceda 360px, por lo que quiero aumentar la altura deltext1 en consecuencia.

Mi código de prueba

newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 

devuelve 0 - (mi selector es correcto como la div apuntado es perfectamente rosa!).

¿Por qué es esto? Sé, a partir de las respuestas a las publicaciones anteriores en este sitio, que la solución es agregar desbordamiento: oculto el texto1, pero me gustaría entender por qué mi intento de obtener el alto de rhs y lhs div está fallando.

+1

Si los elementos que flotan pueden necesidad de contenerlos estableciendo desbordamiento: oculto en el cuadro delimitador o borrando flotantes en el siguiente elemento – Alex

+1

¿Están flotando los elementos contenidos (izquierda y derecha)? Probablemente tenga que despejar el flotante en el contenedor para que realmente contenga sus hijos. –

+1

Usted dice que el contenido se entrega a través de una llamada ajax. ¿Estás leyendo la altura después de la llamada ajax? –

Respuesta

28

Asegúrese de que el código está dentro del $ (ventana) .load [No $ (document) ready]

$(window).load(function() { 
    newhgt = $('#thetext1').find('div.rhs').css("background", "pink").height(); 
}); 
+0

¿Puede explicar por qué usaremos window.load en lugar de document.ready en este o casos similares? ¡Gracias! –

+1

Para ser sincero, no estoy 100% seguro. Sin embargo, funcionó. Mi suposición es que document.ready es solo eso. Los elementos de los documentos se descargan y el DOM está 'listo', mientras que window.load significa que la ventana se ha cargado y las dimensiones se han calculado. – Gazzer

+1

@Gazzer.height me estaba devolviendo 0 en navegadores web como Opera y Chrome. Usando $ (ventana) .load (función() {}); trabajó para mi. Gracias – Muk

7

Tuve el mismo problema, y ​​noté una cosa, el div debe estar visible cuando llamas .height();

Pero, incluso si el div está visible, los padres de este div deben estar visibles. Por lo que debe garantee que los padres div son visibles (pantalla! = Ninguno)

escribir un $('#div').parent().show(); hará una matriz visible, que pueda necesitar anothers parent().show();

+0

Pensé que este podría ser el problema. Pero en mi caso tengo un cuadro delimitador con dos imágenes adentro. Uno es pequeño, dentro de la caja, tiene esa altura. Pero el otro pasa el límite (el límite tiene desbordamiento oculto). 0 altura devuelta en ese. El recuadro delimitador no muestra ninguno mientras busca detalles. Por lo tanto, es difícil creer que sea esto. Todas las alturas son apropiadamente agarradas luego haciendo otras funciones. –

0
newhgt = $('#thetext1').find('div.rhs').css("background", "pink")[0].getBoundingClientRect().height; 
Cuestiones relacionadas