Использование Computed Style

Что же показало тестирование? По меньшей мере, некорректно сравнивать универсальный (offsetHeight) и частный (style.display) случаи. Тестирование показало, что за универсальность надо платить. Если же все-таки хочется универсальности, то можно предложить другой подход: определение Computed Style - конечного стиля элемента (после всех CSS-преобразований).

getStyle = function()
{
        var view = document.defaultView;

        if(view && view.getComputedStyle)
               return function getStyle(el,property)
               {
                       return view.getComputedStyle(el,null)[property] ||
                               el.style[property];
               };

        return function getStyle(el,property)
        {
               return el.currentStyle && el.currentStyle[property] ||
                       el.style[property];
        }
}();

Проведем тестирование этого способа и сведем все результаты в таблицу.

IE sp62 Firefox 2.0.0.12 Opera 9.22 Safari 3.04b
offsetHeight 23500 4453 4453 5140
style.display 171 56 56 34
getStyle 5219 5318

Таблица 6.4. Резульаты выполнения функции getStyle. Времена приведены в миллисекундах

Во-первых, для IE и Firefox (наиболее популярных браузеров) функция эта работает некорректно (в общем случае возвращает неверные данные). Во-вторых, работает она чуть ли не медленнее, чем offsetHeight.

Вообще говоря, рекомендуется не пользоваться такими универсальными функциями (getStyle есть практически в каждой JavaScript-библиотеке), а реализовывать необходимую функциональность в каждом конкретном случае. Ведь если мы договоримся, что скрытые элементы должны иметь класс hide, то все сведется к определению наличия этого класса у элемента или его родителей.