2010-09-13 4 views
2

Я знаю, что существует разница между ff и т. Д. Относительно атрибута 'class'.global var in JS

Я хочу поставить в то global.js подобное:

function GetVarByBrowser() 
{ 
    if (navigator.appName == 'Microsoft Internet Explorer') 
    { 
    var getClass= 'className'; 
    } 
    else 
    { 
    var getClass= 'class'; 
    } 

} 

и на странице я прибавил:

ElementServer.setAttribute(GetVarByBrowser(), 'server'); 

, как я могу сделать это работает?

+1

Ваш код будет устанавливать атрибут «имя класса» в режимах документов Internet Explorer 8 и 9 вместо установки атрибута «class». –

ответ

2

Нет необходимости в глобальных переменных. Вместо этого функция возвращает значение:

function GetVarByBrowser() 
{ 
    if (navigator.appName == 'Microsoft Internet Explorer') 
    { 
    return 'className'; 
    } 
    else 
    { 
    return 'class'; 
    } 

} 

Однако это несовершенный метод обнаружения браузера по ряду причин. Рассматривали ли вы использование библиотеки jQuery, которая автоматически учитывает такие причуды? Или вы хотите узнать это самостоятельно (что прекрасно и похвально)?

+0

спасибо! Я проверю jQuery. – Ronny

+0

-1 для обнаружения браузера. Это не будет работать в IE8 в режиме стандартов. – RoToRa

+0

@RoToRa, что он делает в функции, на самом деле не проблема, возвращающая значение. Я настоятельно рекомендую использовать jQuery. –

2

Лучше всего использовать свойство getter/setter x.className, что позволяет избежать необходимости использовать функции атрибутов и работает на всех браузерах одинаково.

+0

@Delan: * «При использовании getAttribute и setAttribute вы всегда используете класс, потому что это имя атрибута ...» * О, если бы это было так. Internet Explorer (по крайней мере через IE7, не тестировал IE8 или IE9) требует, чтобы вы использовали «className» даже с 'setAttribute'. Да, это неправильно, но так оно и есть. Также «htmlFor» при выполнении атрибута 'for'. (Совершенно верно, что отраженное свойство всегда 'className'.) –

+0

Подождите ... действительно? Ух ты. Я узнаю что-то новое о дерьме IE каждый день ...; D –

+0

@ Delan: Возможно, вы, вероятно, использовали библиотеку, которая изолирует вас от этого мусора. :-) Попробуйте это в IE6 (еще (!!) в главном браузере), например: http://jsbin.com/evobu Просто протестировал IE8 и с удовольствием сказал, что по крайней мере * это * исправлено сейчас. –

-1

Я хотел бы предложить несколько иной подход:

var setClassAttribute(e, value); 
if (navigator.appName == 'Microsoft Internet Explorer') 
{ 
    setClassAttribute = function(e, value) { 
     e.setAttribute('className', value); 
    } 
} 
else 
{ 
    setClassAttribute = function(e, value) { 
     e.setAttribute('class', value); 
    } 
} 

Теперь вы можете использовать эту новую функцию следующим образом:

setClassAttribute(ElementServer, 'server'); 
0

Никогда не используйте обнаружение браузера! Это сломается в IE8 в режиме стандартов!

В этом случае нет причин использовать setAttribute. e.className = 'some_class' будет работать во всех браузерах.