Как вы получаете визуализированную высоту элемента?
Допустим, у вас есть <div>
элемент с некоторым содержанием внутри. Этот контент внутри будет растягивать высоту <div>
. Как вы получаете «визуализированную» высоту, если вы явно не установили высоту. Очевидно, я попытался:
var h = document.getElementById('someDiv').style.height;
Есть ли хитрость для этого? Я использую jQuery, если это помогает.
javascript
jquery
css
height
BuddyJoe
источник
источник
Ответы:
Должно быть просто
с помощью jQuery. Получает высоту первого элемента в упакованном наборе в виде числа.
Пытаясь использовать
работает только если вы установили свойство в первую очередь. Не очень полезно!
источник
Попробуйте один из:
clientHeight
включает в себя высоту и вертикальные отступы.offsetHeight
включает в себя высоту, вертикальные отступы и вертикальные границы.scrollHeight
включает в себя высоту содержимого документа (будет больше, чем высота в случае прокрутки), вертикальное заполнение и вертикальные границы.источник
.clientWidth/.clientHeight
НЕ включайте ширину прокрутки, если показана прокрутка. Если вы хотите, чтобы ширина прокрутки была включена, можете использоватьelement.getBoundingClientRect().width
вместо этогоНЕТ JQUERY, так как
elem.style.height
в верхней части этих ответов была куча ссылок ...ВНУТРЕННЯЯ ВЫСОТА:
https://developer.mozilla.org/en-US/docs/Web/API/Element.clientHeight
ВЫСОКАЯ ВЫСОТА:
https://developer.mozilla.org/en-US/docs/Web/API/HTMLElement.offsetHeight
Или одна из моих любимых ссылок: http://youmightnotneedjquery.com/
источник
Ты можешь использовать
.outerHeight()
для этой цели.Это даст вам полную визуализацию высоты элемента. Кроме того, вам не нужно устанавливать какие-либо
css-height
элементы. В качестве меры предосторожности вы можете сохранить его высоту автоматически, чтобы он мог отображаться в соответствии с высотой содержимого.Для наглядного представления этих функций вы можете перейти на сайт jQuery или подробный пост здесь .
это будет ясно разницу между
.height()
/innerHeight()
/outerHeight()
источник
Я использую это, чтобы получить высоту элемента (возвращает float) :
Это также работает, когда вы используете виртуальный DOM . Я использую его в Vue следующим образом:
источник
тогда просто:
style.height
источник
Обязательно используйте
или
Я публикую это как дополнительный ответ, потому что есть пара важных вещей, которые я только что узнал.
Я только сейчас попал в ловушку использования offsetHeight. Это то, что произошло :
Вот только часть этого:
Да, это выглядит как ОБА прокрутки и смещения. Если это не удается, это выглядит еще дальше, принимая во внимание проблемы совместимости браузера и CSS. Другими словами, вещи, которые я не забочусь - или хочу.
Но я не обязан. Спасибо jQuery!
Мораль истории: если у jQuery есть метод для чего-то, то это, вероятно, по уважительной причине, вероятно, связано с совместимостью.
Если вы недавно не читали список методов jQuery, я предлагаю вам взглянуть.
источник
источник
elem.getBoundingClientRect().height
Я сделал простой код, который даже не нуждается в JQuery и, вероятно, поможет некоторым людям. Он получает общую высоту 'ID1' после загрузки и использует его на 'ID2'
Затем просто установите тело, чтобы загрузить его
источник
Хм, мы можем получить геометрию элемента ...
Как насчет этого простого JS?
источник
var geometry; geometry={};
может быть простоvar geometry={};
Я думаю, что лучший способ сделать это в 2020 году - это использовать обычный JS и
getBoundingClientRect().height;
Вот пример
Помимо
height
этого, у нас также есть доступ к множеству других вещей оdiv
.источник
Так это ответ?
«Если вам нужно что-то вычислить, но не показывать, установите для элемента значение
visibility:hidden
иposition:absolute
, добавьте его в дерево DOM, получите offsetHeight и удалите его (это то, что библиотека прототипов делает за строкой в прошлый раз, когда я проверял)».У меня та же проблема по ряду элементов. На сайте нет ни jQuery, ни прототипов, но я полностью поддерживаю заимствование техники, если она работает. В качестве примера некоторых вещей, которые не сработали, после чего я приведу следующий код:
который в основном пытается что-нибудь и все, только чтобы получить нулевой результат. ClientHeight без каких-либо последствий. С проблемными элементами я обычно получаю NaN в базе и ноль в высотах смещения и прокрутки. Затем я попытался добавить решение DOM и clientRects, чтобы увидеть, работает ли оно здесь.
29 июня 2011 года я действительно обновил код, чтобы попытаться добавить DOM и clientHeight с лучшими результатами, чем я ожидал.
1) clientHeight также был 0.
2) Дом на самом деле дал мне рост, который был отличным.
3) ClientRects возвращает результат, почти идентичный методу DOM.
Поскольку добавленные элементы являются текучими по своей природе, при добавлении их в пустой элемент Temp DOM в противном случае они отображаются в соответствии с шириной этого контейнера. Это странно, потому что это на 30px короче, чем в итоге получается.
Я добавил несколько снимков, чтобы проиллюстрировать, как высота рассчитывается по-разному.
Разница в высоте очевидна. Я, конечно, мог бы добавить абсолютное позиционирование и скрытое, но я уверен, что это не будет иметь никакого эффекта. Я продолжал убеждаться, что это не сработает!
(Я отвлекаюсь дальше) Высота получается (отображается) ниже, чем истинная отображаемая высота. Эту проблему можно решить, установив ширину элемента DOM Temp в соответствии с существующим родителем, и теоретически это можно сделать довольно точно. Я также не знаю, что произойдет, если удалить их и добавить обратно в их существующее местоположение. Когда они пришли через метод innerHTML, я буду искать, используя этот другой подход.
* ОДНАКО * Ничего из этого не было необходимо. Фактически это работало как рекламируется и возвратило правильную высоту !!!
Когда я смог снова увидеть меню, DOM вернул правильную высоту в соответствии с макетом жидкости в верхней части страницы (279 пикселей). Приведенный выше код также использует getClientRects, которые возвращают 280px.
Это показано на следующем снимке (взятом из Chrome после работы.)
Теперь у меня нет идеи, почему этот трюк с прототипом работает, но, похоже, это так. Кроме того, getClientRects также работает.
Я подозреваю, что причиной всех этих проблем с этими конкретными элементами было использование innerHTML вместо appendChild, но на данный момент это чистое предположение.
источник
offsetHeight
, как правило.Если вам нужно что-то вычислить, но не показать, установите для элемента значение
visibility:hidden
иposition:absolute
, добавьте его в дерево DOM, получитеoffsetHeight
и удалите его. (Это то, что библиотека прототипов делает за кулисами в прошлый раз, когда я проверял).источник
Иногда offsetHeight будет возвращать ноль, потому что созданный вами элемент еще не отрисован в Dom. Я написал эту функцию для таких обстоятельств:
источник
Если вы уже используете jQuery, лучше всего выбрать
.outerHeight()
или.height()
, как уже было сказано.Без jQuery вы можете проверить размер используемого блока и добавить различные отступы + border + clientHeight, или вы можете использовать getComputedStyle :
var h = getComputedStyle (document.getElementById ('someDiv')). height;
h
теперь будет выглядеть как "53.825px".И я не могу найти ссылку, но я думаю, что слышал, что это
getComputedStyle()
может быть дорого, поэтому, вероятно, это не то, что вы хотите вызывать в каждомwindow.onscroll
событии (но, в то же время, это не jQueryheight()
).источник
getComputedStyle
, используйте,parseInt(h, 10)
чтобы получить целое число для расчетов.С MooTools :
$('someDiv').getSize().y
источник
Если я правильно понял ваш вопрос, то, возможно, что-то подобное поможет:
источник
Вы специально установили высоту в CSS? Если у вас нет, вам нужно использовать,
offsetHeight;
а неheight
источник