Безопасно ли использовать getElementByClass в браузерах, таких как getElementById? - PullRequest
9 голосов
/ 23 мая 2009

Безопасно ли использовать getElementByClass в браузерах, таких как getElementById?

Обновление В настоящее время используется:

 window.opener.document.getElementById

Но я хочу сослаться на объект по имени класса (с таким именем класса будет только 1 элемент).

Ответы [ 5 ]

9 голосов
/ 23 мая 2009

getElementsByClassName, к сожалению, не является надежным кросс-браузерным. В настоящее время он поддерживается последними версиями Firefox, Opera, Safari и Chrome, но совсем не поддерживается в Internet Explorer или Konqueror, согласно Quirksmode .

Если вы хотите использовать его кросс-браузерно, вам придется предоставить собственную реализацию для тех браузеров, которые его не поддерживают, как в блоге PPK :

function getElementsByClassName(node,classname) {
    if (node.getElementsByClassName)
        return node.getElementsByClassName(classname);
    else {
        // your custom function
    }
}
2 голосов
/ 23 мая 2009

Как уже упоминалось другими, getElementsByClassName недоступно в Internet Explorer.

См. Раздел Настройка DOM в Прототипы объектной модели документа, часть 1: Введение для получения информации о реализации функциональности в IE.

2 голосов
/ 23 мая 2009

IIRC, getElementsByClassName был представлен в Firefox 3, Safari 3.1 и был в Chrome с самого начала. Я не знаю, был ли / когда он был добавлен в Opera, но его вообще нет в Internet Explorer. (Хотя его можно добавить в IE8 путем расширения прототипов DOM; см. Ответ Гранта .)

Другими словами, если вам нужен кросс-браузер getElementsByClassName, вам нужно либо свернуть свой собственный, либо использовать каркас.

1 голос
/ 23 мая 2009

Я бы предложил использовать библиотеку-оболочку, такую ​​как prototype.js или jQuery, которая поддерживает модель селектора CSS и решает проблемы совместимости браузера (обычно IE6-7 - это более крупные проблемы)

1 голос
/ 23 мая 2009

Если вы действительно хотите использовать его, вы можете проверить, поддерживает ли объект getElementsByClassname, прежде чем использовать его, и вернуться к реализации функции JS, если браузер его не поддерживает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...