¿Cómo determino scrollHeight?

95

¿Cómo determino el scrollHeight de una división usando css overflow: auto?

He intentado:

$('test').scrollHeight();
$('test').height(); but that just returns the size of the div not all the content

En última instancia, estoy tratando de crear un chat y siempre tengo la barra de desplazamiento al mensaje actual en la pantalla.

Entonces estaba pensando en algo como lo siguiente:

var test = $('test').height();
$('test').scrollTop(test);

Gracias,

Brian

Brian
fuente
¿Qué hay de malo en usar scrollHeight ()?
Badr Hari
2
@BadrHari: No hay scrollHeight()función en jQuery.
TJ Crowder
es $ ('prueba'). get (0) .scrollHeight ();
JFouad

Respuestas:

90

scrollHeight es una propiedad de JavaScript normal, por lo que no necesita jQuery.

var test = document.getElementById("foo").scrollHeight;
Dennis
fuente
¡Gracias! Esto funcionó para mí: var height = document.getElementById ("chatLog"). ScrollHeight - $ ('# chatLog'). Height (); $ ('# chatLog'). scrollTop (altura);
Brian
6
¿Qué pasa con la compatibilidad con el navegador? ¿Todas las versiones principales de los navegadores lo admiten? IE8 +?
SexyBeast
2
@Cupidvogel La página MDN vinculada dice IE8 +
Dennis
316

Las formas correctas en jQuery son:

  • $('#test').prop('scrollHeight') O
  • $('#test')[0].scrollHeight O
  • $('#test').get(0).scrollHeight

Espero eso ayude.

Anmol Saraf
fuente
16
+1 por $ ('# test') [0] .scrollHeight, dado que el autor de la pregunta ya estaba usando jQuery.
Jackson
12
Esta debería ser la respuesta aceptada, ya que responde a la pregunta.
invot
Debería ser la respuesta aceptada. Tenga en cuenta que el propmétodo requiere jquery versión 1.6 o superior. +1 de mí
Vayne
2
Tenga en cuenta que esto solo devuelve el scrollHeight del "primer" elemento encontrado y si algún elemento está actualmente "oculto", puede obtener un cero aquí incluso si otros tienen un scrollHeight positivo, FWIW :)
rogerdpack
@rogerdpack ¡Buen punto señor! Aunque en este ejemplo está usando una ID en lugar de una clase como selector, por lo que debería estar bien, pero es un buen punto.
dave4jr