Obtenha div height com JavaScript simples

312

Alguma idéia de como obter a altura de uma div sem usar o jQuery?

Eu estava procurando Stack Overflow para esta pergunta e parece que todas as respostas estão apontando para jQuery .height().

Eu tentei algo como myDiv.style.height, mas ele não retornou nada, mesmo quando meu div tinha widthe heightdefinido em CSS.

lwiii
fonte

Respostas:

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

ou

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

clientHeight inclui estofamento.

offsetHeight inclui preenchimento, scrollBar e bordas.

Dan
fonte
2
offsetHeight doesnt wokr no IE10 abaixo quirksmode.org/mobile/tableViewport_desktop.html
fearis
3
Você também pode usar o scrollHeightque inclui a altura do documento contido, preenchimento vertical e bordas verticais.
Saeid Zebardast
5
clientHeighttambém inclui preenchimento, por isso não é equivalente a$.height()
Eevee
2
as bordas e a margem também estão ocupando espaço. :) e sua resposta implica clientHeightque não inclui preenchimento. e a pergunta menciona ambos $.height()e .style.height, nenhum dos quais inclui preenchimento, sugerindo que o solicitante também não o deseja.
Eevee
3
Nota: O OP não solicitou respostas que excluíssem o preenchimento . Não há uma solução multiplataforma nativa para a qual estou ciente.
Dan
23

jsFiddle

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

Outra opção é usar a função getBoundingClientRect. Observe que getBoundingClientRect retornará um ret vazio se a exibição do elemento for 'none'.

Exemplo:

var elem = document.getElementById("myDiv");
if(elem) {
   var rect = elem.getBoundingClientRect();
   console.log(rect.height);  
}
user4617883
fonte
2
Eu acho que esta é a melhor solução
Intervalia
11
var myDiv = document.getElementById('myDiv'); //get #myDiv
alert(myDiv.clientHeight);

clientHeight e clientWidth são o que você está procurando.

offsetHeight e offsetWidth também retornam a altura e a largura, mas incluem a borda e a barra de rolagem. Dependendo da situação, você pode usar um ou outro.

Espero que isto ajude.

Keo Strife
fonte
2

As outras respostas não estavam funcionando para mim. Aqui está o que eu encontrei na w3schools , supondo que divtenha um heighte / ou widthconjunto.

Tudo o que você precisa é heighte widthexclui o preenchimento.

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

Vocês que recusaram: Esta resposta ajudou pelo menos 5 pessoas, a julgar pelos votos que recebi. Se você não gostar, me diga o porquê para que eu possa consertar. Essa é a minha maior irritação com votos negativos; você raramente me diz por que votou negativamente.

guindaste
fonte
23
Isso não funcionará, a menos que a div tenha um conjunto heighte / ouwidth
hopkins-matt
1
Eu pensei que era assumido e implícito. Gostaria que a ressalva mencionada na minha resposta?
craned
2
É melhor. Eu, pessoalmente, não consideraria os outros métodos como não precisos. Atrevo-me a dizer que tenho um uso offsetHeighte com clientHeightmais frequência do que style.height.
Hopkins-mate
1
Eles não estavam trabalhando para mim. Foi por isso que postei esta resposta.
craned
1
Não vejo como a w3schools diz que os outros métodos não são precisos.
precisa saber é o seguinte
1
<div id="item">show taille height</div>
<script>
    alert(document.getElementById('item').offsetHeight);
</script>

Jsfiddle

user3556121
fonte
1

Além de el.clientHeighte el.offsetHeight, quando você precisar da altura do conteúdo dentro do elemento (independentemente da altura definida no próprio elemento), poderá usar el.scrollHeight. mais informações

Isso pode ser útil se você desejar definir a altura ou a altura máxima do elemento para a altura exata do conteúdo dinâmico interno. Por exemplo:

var el = document.getElementById('myDiv')

el.style.maxHeight = el.scrollHeight+'px'
cronoklee
fonte
Para quem se perguntando, isso é muito útil para fazer transições CSS para dropdowns que têm conteúdo dinâmico altura
cronoklee
1

experimentar

myDiv.offsetHeight 

Kamil Kiełczewski
fonte
1

Aqui está mais uma alternativa:

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
fonte
1

Uma opção seria

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