ScrollHeight в IE7 возвращает неправильное значение, если специально не указано перед использованием

Я работаю над классом Accordion для MooTools, который более удовлетворен тем, что мне нужно, но заметил, что в IE7 (который мне все еще нужно поддерживать) element.scrollHeight возвращает неправильное значение, если я специально не ссылаюсь на него раньше используй это. Например, у меня есть элемент с классами "container" и "collapsed" и следующие стили, скрытые со страницы:

.container {
    overflow: hidden;
}

/* removed when made visible */
.collapsed {
    left: -9999em;
    position: absolute;
    top: 0px;
}

Когда мне нужно отобразить этот элемент, я удаляю класс и вычисляю его scrollHeight. В большинстве браузеров это работает отлично. Однако в IE7 следующий код возвращает высоту, которая значительно меньше фактического элемента scrollHeight:

// remove the collapsed class
elem.removeClass('collapsed');

alert(elem.scrollHeight); // consistently '69px' across all accordion folds

Однако, если я сначала ссылаюсь на elem.scrollHeight, предупрежденный scrollHeight верен:

// remove the collapsed class
elem.removeClass('collapsed');

if (elem.scrollHeight) alert(elem.scrollHeight); // the scrollHeight is correct

Требуется ли IE7 еще несколько миллисекунд для правильного пересчета элемента scrollHeight или есть что-то еще в игре?

Благодарим за помощь!

Ответ 1

См. эту таблицу.

Когда элемент не имеет полос прокрутки, IE делает scrollHeight равный фактической высоте содержимого; а не высоту элемент. scrollWidth является правильным, за исключением IE8, где его 5 пикселей выкл.

И scrollHeight помечен как "неправильный" для ie5-7. Может быть, он будет работать с offsetHeight? Или вычислить его как-то из других свойств?

Также здесь упомянул, что...

Что бы вы ни делали, в IE доступ к свойствам не до загрузки тела уволен, иначе вы получите странные результаты.