пятница, 1 октября 2010 г.

[блогеру на заметку] Реализация getElementsByClassName для IE8

Добавил в шаблон блога реализацию метода getElementsByClassName для Internet Explorer, теперь в IE8 нормально отрабатывает скрипт замены дат. В других браузерах, не имеющих поддержки этого метода, код тестировать лень, так как их долей по сравнению с Firefox 3 и IE8 можно спокойно пренебречь.

В отличие от большинства реализаций getElementsByClassName, что попадаются в интернетах, данная встраивается непосредственно в прототипы объектов DOM-дерева и может вызываться как метод любого узла, а не как внешняя функция. Т.е. весь остальной код не придётся переделывать ради совместимости с IE.

<script type='text/javascript'>
    if( typeof document.getElementsByClassName != 'function' ) {
        HTMLDocument.prototype.getElementsByClassName = Element.prototype.getElementsByClassName = function (className) {
            if( !className )
                return [];
            var elements = this.getElementsByTagName('*');
            var list = [];
            var expr = new RegExp( '(^|\\b)' + className + '(\\b|$)' );
            for (var i = 0, length = elements.length; i &lt; length; i++)
                if (expr.test(elements[i].className))
                    list.push(elements[i]);
            return list;
        };
    }
</script>

5 комментариев

Анонимный

HTMLDocument - определение отсутствует. IE8

Анонимный

Спасибо, мужик! :D

Konstantin Baranov

спасибо мужик

Анонимный

HTMLDocument и Element не понимает ие. Это точно рабочий пример?

Ростислав Дубровин

Часть этого кода мне помогла, спасибо

Отправить комментарий