Отримайте висоту діва за допомогою простого JavaScript


312

Будь-які ідеї, як досягти висоти діва без використання jQuery?

Я шукав переповнення стека для цього питання, і, здається, кожна відповідь вказує на jQuery .height().

Я спробував щось на кшталт myDiv.style.height, але нічого не повернулося, навіть коли мій дів був своїм widthі heightвстановлений у CSS.



Відповіді:


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

або

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

clientHeight включає підкладку.

offsetHeight включає в себе прокладку, прокруткуБар та рамки.


2
offsetheight doesnt wokr on ie10 нижче quirksmode.org/mobile/tableViewport_desktop.html
strahis

3
Ви також можете використовувати, scrollHeightякий включає висоту документа, що міститься, вертикальну прокладку та вертикальні межі.
Саїд Зебардаст

5
clientHeightтакож включає прокладки, тому це не рівнозначно$.height()
Eevee

2
кордони і запас також там займають місце. :) а ваша відповідь означає, clientHeightщо не включає прокладки. і питання згадує і те, $.height()і .style.heightжодне з них не включає прокладку, припускаючи, що запитуючий його теж не хоче.
Eevee

3
Примітка: ОП не просили відповідей, які виключали прокладку . Немає вітчизняного кросплатформенного рішення для того, про що я знаю.
Dan


22

Іншим варіантом є використання функції getBoundingClientRect. Зверніть увагу, що getBoundingClientRect поверне порожню пряму, якщо відображення елемента "жодне".

Приклад:

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

2
Я думаю, що це краще рішення
Інтерваліа"

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

clientHeight та clientWidth - це те, що ви шукаєте.

offsetHeight та offsetWidth також повертають висоту та ширину, але вона включає рамку та смугу прокрутки. Залежно від ситуації ви можете використовувати те чи інше.

Сподіваюсь, це допомагає.


2

Інші відповіді не працювали на мене. Ось, що я знайшов у w3schools , припускаючи, що divмає а heightта / абоwidth встановити.

Все, що вам потрібно - це heightі widthвиключити прокладки.

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

Ви, користувачі, що користуються: Ця відповідь допомогла щонайменше 5 людям, судячи з отриманих нами результатів. Якщо вам це не подобається, скажіть мені, чому я можу це виправити. Це мій найбільший домашній улюбленця з нивотами; ти рідко кажеш мені, чому ти це спростовуєш.


23
Це не спрацює, якщо у div немає набір heightта / абоwidth
hopkins-matt

1
Я думав, що це передбачається і мається на увазі. Чи хотіли б ви вказати цей застереження у моїй відповіді?
викрадено

2
Так краще. Я особисто не вважав би інші методи неточними. Я б ризикну сказати, що я користуюся offsetHeightі clientHeightчастіше, ніж це style.height.
хопкінс-мат

1
Вони не працювали на мене. Тому я опублікував цю відповідь.
викрадено

1
Я не бачу, як w3schools каже, що інші методи не точні.
aknuds1


1

На додаток до el.clientHeightі el.offsetHeight, коли вам потрібна висота вмісту всередині елемента (незалежно від висоти, встановленої на самому елементі), ви можете використовувати el.scrollHeight.більше інформації

Це може бути корисно, якщо ви хочете встановити висоту елемента або максимальну висоту на точну висоту його внутрішнього динамічного вмісту. Наприклад:

var el = document.getElementById('myDiv')

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

Для всіх, хто цікавиться, це дуже корисно робити переходи CSS для
спаднень,


1

Ось ще одна альтернатива:

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

    }

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.