Запуск разных JS для IE6 / Другие браузеры - PullRequest
1 голос
/ 13 января 2011

У меня есть код:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class", "gDay gDayHover");

Это работает во всех современных браузерах, но не в IE6. IE6 нужно:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("className", "gDay gDayHover");

У меня будет другая переменная:

var addOnClassAtt;

, который либо установлен на "", либо "Имя", поэтому я могу запустить одну строку:

document.getElementById("gD" + gDay + gMonth + gYear).setAttribute("class" + addOnClassAtt, "gDay gDayHover");

Как бы я определил, использует ли пользователь браузер, который требует className, а не class? Я бы предпочел держаться подальше от обнаружения в браузере и использовать для этого метод начального типа типа catch, но если это невозможно, каков наилучший способ?

Ответы [ 2 ]

3 голосов
/ 13 января 2011

В большинстве случаев лучше обнаруживать функции, а не браузер. Обнаружение функций в Javascript и проще, и надежнее, чем в браузере.

В этом конкретном случае вам лучше установить класс следующим образом:

document.getElementById(...).className = "gDay gDayHover";

Этот код должен работать во всех браузерах, включая IE6.

Причина, по которой у вас возникла проблема с этим, заключается в том, что атрибут класса в DOM называется className.

Это потому, что слово class является зарезервированным словом в JavaScript, поэтому наличие его в DOM в некоторых случаях может привести к неоднозначности, но, как вы видите, решение этой проблемы привело к возникновению других проблем!

Из этого следует, что setAttribute не является надежной функцией для установки атрибута class. Большинство других атрибутов должны быть в порядке с setAttribute, хотя некоторые другие могут также иметь проблемы, поэтому в общем случае лучше использовать свойство DOM.

2 голосов
/ 13 января 2011

Не используйте setAttribute для установки имени класса, IE будет волноваться; вместо этого установите свойство className объекта DOM:

document.getElementById("gD" + gDay + gMonth + gYear).className = "gDay gDayHover";
...