Obtenez la hauteur de div avec JavaScript simple


312

Des idées sur la façon d'obtenir la hauteur d'un div sans utiliser jQuery?

Je cherchais Stack Overflow pour cette question et il semble que chaque réponse pointe vers jQuery .height().

J'ai essayé quelque chose comme myDiv.style.height, mais il n'a rien retourné, même lorsque mon div avait son widthet heightdéfini en CSS.



Réponses:


587
var clientHeight = document.getElementById('myDiv').clientHeight;

ou

var offsetHeight = document.getElementById('myDiv').offsetHeight;

clientHeight comprend un rembourrage.

offsetHeight inclut le rembourrage, la barre de défilement et les bordures.


2
offsetheight ne fonctionne pas sur ie10 en dessous de quirksmode.org/mobile/tableViewport_desktop.html
fearis

3
Vous pouvez également utiliser scrollHeightce qui inclut la hauteur du document contenu, le remplissage vertical et les bordures verticales.
Saeid Zebardast

5
clientHeightcomprend également un rembourrage, donc ce n'est pas équivalent à$.height()
Évoli

2
les bordures et les marges prennent également de la place. :) et votre réponse implique de clientHeightne pas inclure de rembourrage. et la question mentionne les deux $.height()et .style.height, aucune des deux n'incluant le remplissage, suggérant que le demandeur n'en veut pas non plus.
Evoli

3
Remarque: OP n'a pas demandé de réponses excluant le remplissage . Il n'y a pas de solution native multiplateforme pour ce que je connais.
Dan


22

Une autre option consiste à utiliser la fonction getBoundingClientRect. Veuillez noter que getBoundingClientRect retournera un rect vide si l'affichage de l'élément est «aucun».

Exemple:

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.height);  
}

2
Je pense que c'est la meilleure solution
Intervalia

11
var myDiv = document.getElementById('myDiv'); //get #myDiv
alert(myDiv.clientHeight);

clientHeight et clientWidth sont ce que vous recherchez.

offsetHeight et offsetWidth renvoient également la hauteur et la largeur mais elles incluent la bordure et la barre de défilement. Selon la situation, vous pouvez utiliser l'un ou l'autre.

J'espère que cela t'aides.


2

Les autres réponses ne fonctionnaient pas pour moi. Voici ce que j'ai trouvé à w3schools , en supposant que le divhas a heightet / ou widthset.

Tout ce dont vous avez besoin est heightet widthd'exclure le rembourrage.

    var height = document.getElementById('myDiv').style.height;
    var width = document.getElementById('myDiv').style.width;

You downvoters: Cette réponse a aidé au moins 5 personnes, à en juger par les votes positifs que j'ai reçus. Si vous ne l'aimez pas, dites-moi pourquoi je peux le réparer. C'est ma plus grande bête noire avec des downvotes; vous me dites rarement pourquoi vous votez contre.


23
Cela ne fonctionnera pas sauf si le div a un ensemble heightet / ouwidth
hopkins-matt

1
Je pensais que c'était supposé et implicite. Souhaitez-vous que cette mise en garde soit mentionnée dans ma réponse?
grue

2
Il est préférable. Personnellement, je ne considérerais pas les autres méthodes comme inexactes. Je me risquerais à dire que j'ai une utilisation pour offsetHeightet clientHeightplus souvent que style.height.
hopkins-matt

1
Ils ne travaillaient pas pour moi. C'est pourquoi j'ai posté cette réponse.
grue

1
Je ne vois pas comment w3schools dit que les autres méthodes ne sont pas précises.
aknuds1

1
<div id="item">show taille height</div>
<script>
    alert(document.getElementById('item').offsetHeight);
</script>

Jsfiddle


1

En plus de el.clientHeightet el.offsetHeight, lorsque vous avez besoin de la hauteur du contenu à l'intérieur de l'élément (quelle que soit la hauteur définie sur l'élément lui-même), vous pouvez l'utiliser el.scrollHeight. Plus d'informations

Cela peut être utile si vous souhaitez définir la hauteur ou la hauteur maximale de l'élément à la hauteur exacte de son contenu dynamique interne. Par exemple:

var el = document.getElementById('myDiv')

el.style.maxHeight = el.scrollHeight+'px'

Pour ceux qui se demandent, cela est très utile pour effectuer des transitions CSS pour les listes déroulantes qui ont un contenu à hauteur dynamique
cronoklee


1

Voici une autre alternative:

var classElements = document.getElementsByClassName("className");

function setClassHeight (classElements, desiredHeightValue) 
    {
        var arrayElements = Object.entries(classElements);
        for(var i = 0; i< arrayElements.length; i++) {
            arrayElements[i][1].style.height = desiredHeightValue;
        }

    }

1

Une option serait

const styleElement = getComputedStyle(document.getElementById("myDiv"));
console.log(styleElement.height);
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.