2012-04-22 10 views
19

Quiero la altura de un elemento contenedor, incluidos los márgenes y los rellenos.outerHeight (true) da el valor incorrecto

Al pasar el puntero sobre el elemento en la herramienta de desarrollo de Chrome, obtengo el valor que estoy buscando pero cuando uso jQuery $('element').outerHeight(true); Obtengo un valor mucho más pequeño.

El elemento contiene un carrusel jQuery (en un contenedor con position:relative y artículos position: absolute), ¿podría tener algo que ver con eso?

Gracias de antemano

+0

tiro largo, pero creo que es posible que tenga '.outerHeight ({margin: true});' –

Respuesta

1

creo que es posible que tenga

.outerHeight({margin: true}); 

Según here:

El margen se puede incluir pasando un mapa opciones con un margen establecido en true.

+0

que me da el mismo valor que outerHeight (verdadero) – Viktor

+0

realidad , funciona para mí: http://jsfiddle.net/HeyJavascript/azTKT/ –

4

He tenido el mismo problema.

outerheight Firefox a través de console.log: 430 Chrome outerheight través console.log: 477

outerheight real (disposición Firebug): 820

Después de abrir Firebug o quitar la barra de estado que define el valor correcto (820) en console.log (y, por lo tanto, el código funciona como debería).

El problema se debió a las imágenes. Aunque lo está ejecutando en un documento listo, no todas las imágenes pueden estar cargadas todavía y, por lo tanto, los cálculos son incorrectos.

Estoy usando el complemento de desandro y se ha solucionado el problema. https://github.com/desandro/imagesloaded

+1

Esto resolvió un problema similar perfectamente para mí. Gracias Zoran. –

+0

acaba de toparse con este problema, un contenedor con una imagen en él causó el problema. Definí una altura para el contenedor en CSS, eso no ayudó. Pero lo que se solucionó es '#container img {max-width: 100%; } ' Eso significa que la imagen que desbordaba el contenedor estaba causando el problema. – KBN

6

Tuve el mismo problema. Me da la altura correcta en Chrome mediante el uso de setTimeout que esperar un poco:

setTimeout (function() { 
     var ht = $('.my-class').outerHeight(true); 
    }, 1); 

espero que ayude!

+0

¡No puedo agradecerle lo suficiente! –

26

Tengo experiencia en este problema varias veces, y la mejor solución, sin el uso de ningún plugin o funciones indiscretas de setTimeout, es usar hook en el evento onLoad del navegador. Con jQuery, se hace así:

$(window).load(function(){ ...outerHeight logic goes here... });

Esto podría ser totalmente independiente de su nivel $(function(){ ...code... }); de modo que todo su otro código que funcione correctamente y no tiene que esperar hasta que cada elemento individual en la página se ha cargado.

¿Por qué sucede esto en el primer lugar:
Chrome tiene un algoritmo de representación diferente de Firefox, que hace que se activa el evento onLoad antes de que todos los elementos de la página están completamente estiradas/visualizada y disponible para jQuery para seleccionar y recuperar alturas. setTimeout() funcionará la mayor parte del tiempo, pero no desea desarrollar una dependencia en algo tan ciego por naturaleza, quién sabe, ¡en el futuro podría arreglarse esta "peculiaridad" en Chrome!:)

0

Si la ventana está cargada y el documento está listo y usted ha considerado flotantes y todavía tiene este problema, considere buscar un elemento con la misma identificación. Asegúrese de estar obteniendo el elemento correcto con su selector jQuery. Olvidé que tenía otro elemento en el dom con la misma identificación exacta. Considere usar jQuery para cambiar el color de fondo para verificar.

0

Intenté cada una de estas soluciones. Finalmente abrí el inspector y me di cuenta de que mi p todavía tenía un margin-top. Como siempre, gracias Normalizar ...

1

el que funcionó exactamente como debe ser para mí fue un combinado de ambos @ Matt Reilly & @Lasha respuestas sobre

$(window).load(function() { 
    setTimeout(function() { 
     // all the logic in here 
    }, 1); 
}); 

Solía ​​poner el código en en $(document).ready(function(){...}); pero a veces se vuelve travieso así que lo anterior funciona perfectamente.

0

Los elementos internos ocultos, fijos y absolutos no se tienen en cuenta de forma adecuada con el exterior.

Tratar la propiedad scrollHeight:

$('element').prop('scrollHeight') 
Cuestiones relacionadas