Comment puis-je obtenir la hauteur d'une div à l'intégralité du contenu avec jQuery?
Je suis en train de créer mes propres barres de défilement. J'ai essayé la plupart de jquery, la barre de défilement plugins et aucun d'entre eux semblent fonctionner pour moi, alors j'ai décidé de créer mon propre. J'ai un débordement de zone avec défilement de contenu. Je peux obtenir la barre de défilement de travailler si je suis en mesure de déterminer la hauteur du défilement de la zone de contenu. J'ai essayé .scrollHeight() et le navigateur ne prend même pas la reconnaître. Le débordement de la zone a une position fixe.
Vous devez vous connecter pour publier un commentaire.
scrollHeight
est une propriété d'un Objet DOM, pas une fonction:Donné ceci:
Cela donne 200:
Par exemple: http://jsfiddle.net/ambiguous/u69kQ/2/ (courir avec la console JavaScript open).
[0]
pour extraire les sous-jacents objet DOM à partir de l'objet jQuery, qui vous donne le même genre de chose quedocument.getElementById()
vais vous donner. Vous pouvez également utiliser du jQueryget
de la fonction.overflow:scroll
, puis il obtient leheight
du contenant, pas le contenu. Je parle de Opera 12.16, l'ancienne version du navigateur Opera, qui sont encore utilisés par de nombreuses personnes. La dernière version qui n'inclut pas de moteur Webkit.Si vous pouvez éventuellement l'aider, NE PAS l'UTILISER .scrollHeight.
.scrollHeight ne pas donner le même type de résultats dans les différents navigateurs, dans certaines circonstances (notamment lors du défilement).
Par exemple:
Si vous ne
vous aurez 900px dans Chrome, FireFox et Opera. C'est très bien.
Mais, si vous joignez un wheelevent /roue de l'événement #externe, lorsque vous faites défiler, Chrome va vous donner une valeur constante de 900px (correct), mais FireFox et Opera va changer leurs valeurs comme vous le faites défiler vers le bas (incorrect).
Un moyen très simple de le faire est comme une (un peu de triche, vraiment). (Dans cet exemple, les travaux, tandis que l'ajout dynamique de contenu à #extérieur en tant que bien):
La raison que j'ai choisi ces trois navigateurs est parce que tous les trois peuvent être en désaccord sur la valeur de .scrollHeight dans certaines circonstances. Je suis tombé sur cette question de faire mon propre scrollpanes. Espérons que cela aide quelqu'un.
$('#outer').get(0).scrollHeight
à la place?On peut aussi utiliser -
Element.scrollHeight
est une propriété, non pas une fonction, comme l'a noté ici. Comme l'a noté ici, le scrollHeight propriété est uniquement pris en charge après IE8. Si vous avez besoin de travailler à avant que, temporairement mis le CSSoverflow
etheight
àauto
, qui sera la cause de la div pour prendre le maximum de la hauteur des besoins. Puis obtenir la hauteur, et de modifier les propriétés de retourner à ce qu'ils étaient avant.Vous pouvez l'obtenir avec
.outerHeight()
.Parfois, il sera de retour
0
. Pour les meilleurs résultats, vous pouvez l'appeler dans votrediv
prêt événement.Pour être sûr, vous ne devriez pas régler la hauteur de l'
div
àx
. Vous pouvez garder sa hauteurauto
pour obtenir le contenu remplis correctement avec la bonne hauteur.Vous pouvez trouver un poste détaillée ici.
scrollHeight
n'est pas seulement buggy, mais ne fonctionne pas lorsque votre conteneur a une codé en dur à la hauteur (ce qui est probablement la plupart des cas, puisque vous voulez obtenir le contenu de la hauteur sans fairecontainer.height()
lui-même)JS:
Bien sûr, cette dernière option ne fonctionne que lorsque
#outer
n'a pas immédiatement texte pour les enfants qui prennent de la place et que vous voulez mesurer. Ce sont mes 2 cents.<div>
dont vous pouvez mesurer facilement en faisant$('#outer').children().height()