Javascript JS中的全局var

Javascript JS中的全局var,javascript,Javascript,我知道ff和ie在属性“class”方面存在差异 我想在global.js中加入这样的内容: function GetVarByBrowser() { if (navigator.appName == 'Microsoft Internet Explorer') { var getClass= 'className'; } else { var getClass= 'class'; } } 在页面中,我添加了以下内容: ElementServer.se

我知道ff和ie在属性“class”方面存在差异

我想在global.js中加入这样的内容:

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

}
在页面中,我添加了以下内容:

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

如何使其工作?

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

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

}

然而,由于许多原因,这是一种不完善的浏览器检测方法。您是否考虑过使用像jQuery这样的库来自动处理这样的怪癖?或者你想自己学习这一点(这很好,值得称赞)?

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

我建议一种稍微不同的方法:

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');

永远不要使用浏览器检测!这将打破IE8的标准模式


在这种情况下,没有理由使用
setAttribute
e.className='some_class'
在所有浏览器中都能工作。

@Delan:“当使用getAttribute和setAttribute时,您总是使用class,因为这是属性名…”哦,如果这是真的话。Internet Explorer(至少通过IE7,尚未测试IE8或IE9)要求您使用“className”,即使使用
setAttribute
。是的,这是错误的,但事实就是这样。在为属性执行
时,也可以使用“htmlFor”。(很正确,反射的属性总是
className
)。。。真正地哦哇!我每天都会学到一些关于IE的新东西;D@Delan:是的,你可能一直在使用一个能让你远离垃圾的图书馆。:-)在IE6(仍然是主流浏览器)中试试这个,例如:刚刚测试了IE8,很高兴地说,至少现在已经修复了。我不想表现得傲慢或其他消极,但我实际上一直在避免使用库,因为它们会减慢用户离开IE的速度。我尝试不支持IE(需要IE支持的客户除外)@Delan:LOL!Fair'nuff,尽管你在那里穿了一件很时髦的衣服——你不可能在不否认jQuery、Prototype、Closure等库给你带来的其他好处的情况下支持IE!顺便说一句,你可能想编辑或删除这个答案,因为它在当前的形式下是不正确的。-1用于浏览器检测。这不起作用在IE8的标准模式下。@RoToRa他在函数中所做的并不是这里真正的问题,返回值是。我明确建议使用jQuery。没错,但向初学者展示这样的坏方法是非常糟糕的。@RoToRa我同意,但眼前的问题是如何更改OP的函数,使其返回值。这个示例不会您的代码将在Internet Explorer 8和9文档模式中设置名为“classname”的属性,而不是设置“class”属性。