Скажем, у меня есть элемент «контейнер», который имеет overflow:auto
, с внутренним «содержимым». Высота контейнера представляет собой процент от высоты окна, а содержание может быть любой высоты:Как надежно получить размеры двух элементов при загрузке страницы
<div id="container">// Height dependent on window size
<div id="content">
// Arbitrary amount of content here
</div>
</div>
CSS в соответствии с просьбой - пожалуйста, обратите внимание, в моем сценарии «реального мира», то элемент контента на самом деле таблица, с правилами как показано ниже:
#container {
height:100%;
overflow:auto
}
#content {
border-collapse: collapse;
border-spacing: 0;
}
То, что я хочу сделать, это проверить, не превышает ли высота содержание в контейнер и делать что-то, если оно истинно.
Однако, если я просто сделать:
$(document).ready(function(){
var containerH = $('#container').outerHeight();
var contentH = $('#content').outerHeight();
if (contentH > containerH) {
// If the content's too big, do things...
};
});
, если заявление никогда не работает, потому что две высоты всегда вычисляются как равных - даже тогда, когда я знаю, что это не так. Последующие проверки всегда показывают фактические размеры.
Так что я подумал: возможно, элементы не закончили рендеринг (я использую @ font-face для стилизации текста в элементах - возможно, мне нужно дождаться, когда это будет завершено), а затем я попытался сделать что-то вроде :
$(document).ready(function(){
var container = $('#container');
var content = $('#content');
function getProperHeight(el){
var height = el.load(function(){
var h = this.outerHeight();
return h;
});
return height;
};
var containerH = getProperHeight(container);
var contentH = getProperHeight(content);
console.log(containerH + ' ' + contentH)
};
который ближе я получил с помощью метода load()
, но я получаю [объект Object] для обоих ожидаемых значений.
Вкратце - как я могу получить фактические визуализированные размеры двух элементов?
Я думаю, ваша проблема в том, что ваш делают этот расчет на $ (документ) .ready(). Вы должны попробовать поместить этот код в событие нажатия кнопки и посмотреть, работает ли он. – Hoffmann
Я вижу логику в том, что вы предлагаете, но это необходимо для работы с загрузкой страницы. Получение высот в пользовательском событии тривиально, так как элементы почти наверняка загружены этой точкой. – verism
Я просто сказал, чтобы вы попытались посмотреть, работает ли он на кнопку. Если он работает над кнопкой, проблема заключается в том, что в то время, когда $ (document) .ready() вызывается, DOM фактически не обработал ваш CSS, чтобы сделать вычисления так, как вы хотите. Если это так, вы можете установить CSS на javascript или изучить другие возможности событий. – Hoffmann