Obtenga altura div con JavaScript simple

312

¿Alguna idea sobre cómo obtener la altura de un div sin usar jQuery?

Estaba buscando Stack Overflow para esta pregunta y parece que cada respuesta apunta a jQuery .height().

Intenté algo así myDiv.style.height, pero no devolvió nada, incluso cuando mi div tenía el suyo widthy estaba heightconfigurado en CSS.

lwiii
fuente

Respuestas:

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

o

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

clientHeight Incluye acolchado.

offsetHeight incluye relleno, barra de desplazamiento y bordes.

Dan
fuente
2
offsetheight no funciona en ie10 debajo de quirksmode.org/mobile/tableViewport_desktop.html
fearis
3
También puede usar el scrollHeightcual incluye la altura del documento contenido, el relleno vertical y los bordes verticales.
Saeid Zebardast
55
clientHeighttambién incluye relleno, por lo que no es equivalente a$.height()
Eevee
2
los bordes y el margen también están ocupando espacio. :) y su respuesta implica clientHeightque no incluye relleno. y la pregunta menciona ambos $.height()y .style.height, ninguno de los cuales incluye relleno, lo que sugiere que el autor de la pregunta tampoco lo quiere.
Eevee
3
Nota: OP no solicitó respuestas que excluyeran el relleno . No hay una solución multiplataforma nativa para lo que conozco.
Dan
23

jsFiddle

var element = document.getElementById('element');
alert(element.offsetHeight);
Daniel Imms
fuente
22

Otra opción es usar la función getBoundingClientRect. Tenga en cuenta que getBoundingClientRect devolverá un rect vacío si la pantalla del elemento es 'none'.

Ejemplo:

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.height);  
}
usuario4617883
fuente
2
Creo que esta es la mejor solución
Intervalia
11
var myDiv = document.getElementById('myDiv'); //get #myDiv
alert(myDiv.clientHeight);

clientHeight y clientWidth son lo que está buscando.

offsetHeight y offsetWidth también devuelven la altura y el ancho, pero incluye el borde y la barra de desplazamiento. Dependiendo de la situación, puede usar uno u otro.

Espero que esto ayude.

Keo Strife
fuente
2

Las otras respuestas no estaban funcionando para mí. Esto es lo que encontré en w3schools , suponiendo que divtiene un heighty / o widthconjunto.

Todo lo que necesita es heighty widthexcluir el relleno.

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

Votantes: esta respuesta ha ayudado a al menos 5 personas, a juzgar por los votos positivos que he recibido. Si no te gusta, dime por qué para que pueda solucionarlo. Esa es mi mayor molestia con los votos negativos; rara vez me dices por qué lo rechazas.

estirado
fuente
23
Esto no funcionará a menos que el div tenga un conjunto heighty / owidth
hopkins-matt
1
Pensé que se suponía e implicaba. ¿Te gustaría esa advertencia mencionada en mi respuesta?
Craned
2
Es mejor. Yo personalmente no consideraría los otros métodos como no precisos. Me aventuraría a decir que tengo un uso offsetHeighty clientHeightmás a menudo que style.height.
hopkins-matt
1
No estaban trabajando para mí. Por eso publiqué esta respuesta.
Craned
1
No puedo ver cómo w3schools dice que los otros métodos no son precisos.
aknuds1
1
<div id="item">show taille height</div>
<script>
    alert(document.getElementById('item').offsetHeight);
</script>

Jsfiddle

usuario3556121
fuente
1

Además de el.clientHeighty el.offsetHeight, cuando necesita la altura del contenido dentro del elemento (independientemente de la altura establecida en el elemento mismo) puede usar el.scrollHeight. más información

Esto puede ser útil si desea establecer la altura del elemento o la altura máxima a la altura exacta de su contenido dinámico interno. Por ejemplo:

var el = document.getElementById('myDiv')

el.style.maxHeight = el.scrollHeight+'px'
cronoklee
fuente
Para cualquiera que se pregunte, esto es muy útil para hacer transiciones CSS para menús desplegables que tienen contenido de altura dinámica
menús
1

tratar

myDiv.offsetHeight 

Kamil Kiełczewski
fuente
1

Aquí hay una alternativa más:

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;
        }

    }
Pedro Coelho
fuente
1

Una opción sería

const styleElement = getComputedStyle(document.getElementById("myDiv"));
console.log(styleElement.height);
SHIVANSH NARAYAN
fuente