2010-09-13 135 views
2

我知道ff和ie之间关于属性'class'是有区别的。JS中的全局变量

我想放在global.js类似的东西:

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

} 

,并在页面添加此:

​​

我怎么可以把它的工作原理?

+1

您的代码将在Internet Explorer 8和9文档模式中设置名为“classname”的属性,而不是设置“class”属性。 – 2010-09-13 09:51:20

回答

2

不需要全局变量。有函数返回值:

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

} 

但是,这是浏览器检测的一个不完美的方法,原因有很多。你有没有考虑过使用类似jQuery的库来自动处理这种怪癖?或者你想自己学习(这是非常好的和值得称道的)?

+0

谢谢!我会检查jQuery。用于浏览器检测的 – Ronny 2010-09-13 09:02:33

+0

-1。在标准模式下,这不适用于IE8。 – RoToRa 2010-09-13 09:37:24

+0

@RoToRa他在函数中所做的并不是真正的问题,返回的值是。我明确推荐使用jQuery。 – 2010-09-13 09:45:23

2

最好只使用x.className getter/setter属性,它可以避免需要调用属性函数,并且可以在所有浏览器上工作。

+0

@Delan:*“当使用getAttribute和setAttribute时,您总是使用类,因为这是属性名称......”*哦,如果只有这是真的。 Internet Explorer(至少通过IE7,还没有测试过IE8或IE9)需要你使用“className”,即使是使用“setAttribute”。是的,这是错的,但事情就是这样。在执行'for'属性时也是“htmlFor”。 (尽管反射的属性总是'className')。) – 2010-09-13 09:03:46

+0

等等...真的吗?哦...哇。我每天都会学到一些关于IE的垃圾的新东西......; D – 2010-09-13 09:04:57

+0

@Delan:是的,你可能已经在使用一个库来隔离你的垃圾了。 :-)在IE6(仍然是一个主要的浏览器)上试试这个,例如:http://jsbin.com/evobu刚刚测试过IE8,并且很高兴地说至少现在已经修复了*。 – 2010-09-13 09:11:43

-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中突破!

在这种情况下没有理由使用setAttributee.className = 'some_class'将适用于所有浏览器。