Я фактично вдався до трохи хитрощів, щоб часом боротися з цим. Я розробив віджет прокрутки jQuery, в якому зіткнувся з проблемою, про яку я не знаю достроково, чи вміст прокрутки є частиною прихованого фрагмента розмітки чи ні. Ось що я зробив:
// try to grab the height of the elem
if (this.element.height() > 0) {
var scroller_height = this.element.height();
var scroller_width = this.element.width();
// if height is zero, then we're dealing with a hidden element
} else {
var copied_elem = this.element.clone()
.attr("id", false)
.css({visibility:"hidden", display:"block",
position:"absolute"});
$("body").append(copied_elem);
var scroller_height = copied_elem.height();
var scroller_width = copied_elem.width();
copied_elem.remove();
}
Це працює здебільшого, але існує очевидна проблема, яка потенційно може виникнути. Якщо вміст, який ви клонуєте, стилізований за допомогою CSS, який включає в себе посилання на батьківську розмітку у своїх правилах, вміст клонованого не містить відповідного стилю, і, ймовірно, має дещо інші вимірювання. Щоб обійти це, ви можете переконатися, що розмітка, яку ви клонуєте, має до неї застосовані правила CSS, які не містять посилань на батьківську розмітку.
Крім того, це не придумало для мене віджет прокрутки, але щоб отримати відповідну висоту клонованого елемента, вам потрібно встановити ширину на ту ж ширину батьківського елемента. У моєму випадку ширина CSS завжди застосовувалася до фактичного елемента, тому мені не довелося з цього приводу хвилюватися, однак, якщо елемент не має до нього застосованої ширини, можливо, вам доведеться зробити якийсь рекурсивний обхід походження DOM елемента, щоб знайти відповідну ширину батьківського елемента.