2010-09-13 133 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'將適用於所有瀏覽器。