2011-05-18 25 views
2

我有一個select元素,有幾個自定義屬性用於在運行中驗證它並顯示相應的消息。屬性的名稱是駱駝套管在jQuery .attr()似乎是區分大小寫的

<select validationMessage="Must select something" ... >... 

的問題是,在jQuery的版本低於1.6 .attr()似乎是區分大小寫。更有問題的是,它不會獲取原來的套管屬性。在Chrome瀏覽器中,這與Firefox中的工作方式相同,但在Internet Explorer中按預期工作(因爲它應該是不區分大小寫)。有趣的是,任何套管(除了原裝套管)都可以工作。這個是JSFiddle example這個問題。您可以更改左側的jQuery lib版本並點擊「運行」以檢查它是如何與其他版本一起工作的。

我該如何緩解這個問題?

+0

看到這個http://stackoverflow.com/questions/3967869/writing-jquery-selector-case-insensitive-version – Tx3 2011-05-18 10:02:03

+1

這不是問題的欺騙,那問題是關於選擇。 – 2011-05-18 10:22:16

回答

2

如果您將attr()替換爲javascript等效的getAttribute(),它似乎不區分大小寫。

唯一的缺點是,你必須get() JS的第一個對象:

sel.get(0).getAttribute("validationMessage")

See the result here

+0

我知道這個DOM函數,但我不確定它的瀏覽器支持和特性。反正jQuery不是在後臺使用相同的函數嗎? – 2011-05-18 10:05:15

+0

@羅伯特不在1.6之前。1.5.2中的方法是[elem[name]](https://github.com/jquery/jquery/blob/1.5.2/src/attributes.js#L351)。 – lonesomeday 2011-05-18 10:09:09

8

jQuery的改變了attr()作品1.6。在此版本之前,attr()大都直接映射到屬性under the hood —不是人們可能認爲的屬性。由於DOM屬性名稱通常是單個單詞,因此jQuery將大多數字符串轉換爲小寫字母,併爲駱駝式的少數屬性名稱設置了例外。 jQuery採用這種方式的原因是爲了處理瀏覽器不一致和getAttribute()setAttribute()中的錯誤。

從jQuery 1.6開始,對於尚未設置的屬性,.attr()方法返回undefined。另外,.attr()不應該用於普通對象,數組,窗口或文檔。要檢索和更改DOM屬性,請使用.prop()方法。 source

在1.6,attr()映射到getAttribute()under the hood,而新prop()方法檢索的屬性值。

屬性和屬性之間的差異在特定情況下可能很重要。在jQuery 1.6之前,.attr()方法在檢索某些屬性時有時會考慮屬性值,這可能會導致行爲不一致。從jQuery 1.6開始,.prop()方法提供了顯式檢索屬性值的方法,而.attr()只檢索屬性。 source

+2

+1感謝Andy的深度信息 – 2011-05-18 16:42:32