Algunos documentos no puedo obtener la altura del documento (para colocar algo absolutamente en la parte inferior). Además, un relleno inferior parece no hacer nada en estas páginas, pero sí en las páginas donde volverá la altura. Caso (s) en punto:
http://fandango.com
http://paperbackswap.com
En Fandango,
jQuery $(document).height();
devuelve el valor correcto
document.height
devuelve 0
document.body.scrollHeight
devuelve 0
En Paperback Swap:
jQuery's $(document).height();
TypeError: $(document)
es nulo
document.height
devuelve un valor incorrecto
document.body.scrollHeight
devuelve un valor incorrecto
Nota: Tengo permisos de nivel de navegador, si hay algún truco allí.
javascript
Nic
fuente
fuente
Respuestas:
Los tamaños de los documentos son una pesadilla de compatibilidad del navegador porque, aunque todos los navegadores exponen las propiedades clientHeight y scrollHeight, no todos están de acuerdo en cómo se calculan los valores.
Solía haber una fórmula compleja de mejores prácticas sobre cómo se probó la altura / anchura correcta. Esto implicaba usar las propiedades document.documentElement si estaba disponible o recurrir a las propiedades del documento, etc.
La forma más sencilla de obtener la altura correcta es obtener todos los valores de altura encontrados en el documento o documentElement, y usar el más alto. Esto es básicamente lo que hace jQuery:
Una prueba rápida con Firebug + jQuery bookmarklet devuelve la altura correcta para ambas páginas citadas, y también lo hace el ejemplo de código.
Tenga en cuenta que probar la altura del documento antes de que el documento esté listo siempre dará como resultado un 0. Además, si carga más cosas o el usuario cambia el tamaño de la ventana, es posible que deba volver a realizar la prueba. Utilice
onload
un evento listo para documentos si lo necesita en el momento de la carga; de lo contrario, solo pruebe cada vez que necesite el número.fuente
Esta es una pregunta muy antigua y, por lo tanto, tiene muchas respuestas obsoletas. A partir de 2020, todos los principales navegadores se han adherido al estándar .
Respuesta para 2020:
Editar: lo anterior no tiene en cuenta los márgenes en la
<body>
etiqueta. Si su cuerpo tiene márgenes, use:fuente
document.documentElement.getBoundingClientRect()
Funciona mejor<h1>
elemento al comienzo del<body>
margen predeterminado, lo empujará<body>
hacia abajo sin una forma de detectarlo.document.documentElement.scrollHeight
(nodocument.body,scrollHeight
) es la forma más precisa de hacer las cosas. Esto funciona con márgenes corporales y márgenes de cosas dentro del cuerpo empujándolo hacia abajo.Incluso puedes usar esto:
o de una manera más jQuery (ya que como dijiste jQuery no miente) :)
fuente
Cálculo completo de la altura del documento:
Para ser más genérico y encontrar la altura de cualquier documento , puede encontrar el nodo DOM más alto en la página actual con una simple recursión:
Puede probarlo en sus sitios de muestra ( http://fandango.com/ o http://paperbackswap.com/ ) pegando este script en una consola DevTools.
NOTA: está trabajando con
Iframes
.¡Disfrutar!
fuente
El "método jQuery" para determinar el tamaño del documento (consultar todo, tomar el valor más alto y esperar lo mejor) funciona en la mayoría de los casos, pero no en todos .
Si realmente necesita resultados a prueba de balas para el tamaño del documento, le sugiero que use mi complemento jQuery.documentSize . A diferencia de los otros métodos, en realidad prueba y evalúa el comportamiento del navegador cuando se carga y, en función del resultado, consulta la propiedad correcta a partir de ahí.
El impacto de esta prueba única en el rendimiento es mínimo , y el complemento devuelve los resultados correctos incluso en los escenarios más extraños, no porque yo lo diga, sino porque un conjunto de pruebas masivas y autogeneradas realmente verifica que lo hace.
Debido a que el complemento está escrito en Javascript vainilla, también puede usarlo sin jQuery .
fuente
Mentí, jQuery devuelve el valor correcto para ambas páginas $ (document) .height (); ... ¿por qué alguna vez lo dudo?
fuente
La respuesta adecuada para 2017 es:
document.documentElement.getBoundingClientRect().height
A diferencia de
document.body.scrollHeight
este método, se tienen en cuenta los márgenes corporales. También proporciona un valor de altura fraccional, que puede ser útil en algunos casos.fuente
document.body.scrollHeight
enumera toda la altura desplazable, que es lo que hizo la pregunta original.html { height: 100% }
en CSS. Por lo tanto, la API devuelve correctamente la altura real calculada. Intente eliminar este estilo y también agregar márgenesbody
y verá cuál es el problema con el usodocument.body.scrollHeight
.<h1>
elemento al comienzo del<body>
margen predeterminado, lo empujará<body>
hacia abajo sin una forma de detectarlo.document.documentElement.scrollHeight
(nodocument.body,scrollHeight
) es la forma más precisa de hacer las cosas.documentElement.scrollHeight
da un valor incorrecto en este caso.documentElement.getBoundingClientRect().height
da el correcto. miragetBoundingClientRect().height
. Se desvía, mientras que otros 3 (tres) métodos no se desvían. Incluyendo el que mencionas como inferior a él. E insiste en hacerlo sugiriendo eliminar el 100% de la altura html de esta página y agregando márgenes. Cuál es el punto de ? Solo acepta quegetBoundingClientRect().height
tampoco es a prueba de balas.Para obtener el ancho en una forma de navegador cruzado / dispositivo use:
fuente
Para cualquiera que tenga problemas para desplazarse por una página a pedido, utilizando la detección de funciones, he creado este truco para detectar qué función usar en un desplazamiento animado.
El problema era ambos
document.body.scrollTop
ydocument.documentElement
siempre se devolviótrue
en todos los navegadores.Sin embargo, solo puede desplazar un documento con uno u otro.
d.body.scrollTop
para Safari ydocument.documentElement
para todos los demás según w3schools (ver ejemplos)element.scrollTop
funciona en todos los navegadores, no así para el nivel de documento.fuente
use el código de soplo para calcular la altura + desplazamiento
fuente
El siguiente código de navegador cruzado evalúa todas las alturas posibles del cuerpo y los elementos html y devuelve el máximo encontrado:
Un ejemplo de trabajo:
fuente
No sé cómo determinar la altura en este momento, pero puedes usar esto para poner algo en la parte inferior:
fuente
Agregar referencias correctamente
En mi caso, estaba usando una página ASCX y la página aspx que contiene el control ascx no está usando las referencias correctamente. Acabo de pegar el siguiente código y funcionó:
fuente