2011-01-10 5 views
8

simple una línea de html:¿Por qué el navegador está devolviendo una cadena vacía en style.height? ¿Cómo obtener la altura real de un elemento?

<div onclick="alert(this.style.height)">sometext</div>

y alerta da:

http://i55.tinypic.com/2rxdtgo.png

pero debe ser como 10px o algo por el estilo.

+0

versión opera? ... –

+0

¿Intentó establecer el estilo explícitamente? '

sometext
' –

+0

use jquery! Tendrás un tiempo mucho más simple, tiene la función $ .height() para indicar la altura. También puede encontrar que no hay altura, por lo que debe comprobar lineHeight y relleno (arriba y abajo). – Jason

Respuesta

17

Cuando se utiliza this.style.height, la altura debe haber sido especificado en el primer elemento, como esto:

<div style="height: 15px;" onclick="alert(this.style.height)">sometext</div> 

De lo contrario, probablemente debería utilizar offsetHeight o clientHeight:

<div onclick="alert(this.offsetHeight)">sometext</div> 
+0

+1 funciona. ¿Pero cómo? ¿Cuál es la diferencia entre 'height' y' offsetHeight'? – Kevin

+0

La 'altura' solo está disponible si ha establecido explícitamente la altura. Pero 'offsetHeight' siempre será la altura calculada. Si no está seguro de cuándo usar cualquiera, entonces un consejo simple es usar 'offsetHeight' cuando está revisando qué altura tiene y' height' cuando está configurando una nueva altura. – DanneManne

+0

wat sobre 'clienteHeight'? ¿Es eso lo mismo que 'offsetHeight'? – Kevin

4

Supongo que no tiene ninguna regla de estilo que establezca la altura del elemento. Para obtener la altura renderizada real de un elemento, use element.clientHeight.

1

object.style.whatever devuelve los valores que se han creado con el atributo de estilo en el marcado, o la propiedad de estilo en la escritura, por lo tanto:

<div style="height:10px" onclick="alert(this.style.height)">sometext</div> 

o

theDiv.style.height = "10px"; 

El método getComputedStyle le permite acceder a las propiedades de estilo, ya que están definidas por la cascada (es decir, usando @style que el anterior, o cualquier mecanismo o <stylesheet>...</stylesheet>)

EDIT: puede beneficiar a utilizar una biblioteca de JS establecida navegadores, en lugar de acceder a este inmueble directamente, y tienen que hacer frente a las peculiaridades de los diversos navegadores. Las versiones anteriores de IE (por ejemplo) no son compatibles con este método.

Cuestiones relacionadas