2011-05-03 69 views
5

在我的項目中,我目前在我的HTML中使用了一些自定義data- *屬性來傳達一些jQuery將使用的額外數據。我發現.data()方法,並注意到如果我有一個data- *屬性data-my-attribute,我可以通過選擇具有該屬性的元素並調用.data("my-attribute")來在jQuery中檢索其值。正在使用.data()來檢索data- *屬性的值是一個好主意?

我認爲這是它應該使用的方式(沒有查看文檔),並通過我的jQuery代碼使用它。然而,現在我注意到,當我在HTML data- *屬性中輸入字符串"000005643"時,.data("my-attribute")返回5643,而.attr("data-my-attribute")返回"000005643"。後者是我想要的。這導致我查閱了文檔,並且發現有更多.data()比我想象的更多。另外,我從未看到任何文本或示例,表明您應該使用.data()來檢索data- *屬性的值。這讓我感到擔心,我正在做一些根本性錯誤的事情。

那麼我應該以這種方式停止並停止使用.data()嗎?如果沒有,你能否將我鏈接到一些關於.data()函數的文檔,以解釋這種用法。

回答

8

data()返回HTML5 data-*屬性的方法是introduced in 1.4.3

從jQuery 1.4.3開始,HTML 5的數據屬性會自動引入到jQuery的數據對象中。

每一次嘗試都將字符串轉換爲JavaScript值(這包括布爾值,數字,對象,數組和空值),否則將其保留爲字符串。要將值的屬性作爲字符串檢索,而不嘗試轉換它,請使用attr()方法。

Source

看來jQuery確定你想要一個數字,所以它會爲你返回一個Number,而不是String

如果你想要它作爲字符串,請使用attr()

+1

啊,好的謝謝。所以,如果我理解正確,如果我期待一個'string',我不應該使用'.data()'。否則,我總是不得不擔心它是否會被轉換並且信息丟失(如前導零)。例如電話號碼,063425346。 – 2011-05-03 06:44:34

1

我實際上正在將此功能移植到Zepto。是的,數據HTML規範並沒有錯,但它只是jQuery的實現。它試圖解決這樣一個事實,即數據不能非常好地處理非字符串,然後嘗試變得花哨併爲您提供像null,int和float之類的值。我想一個解決方法是將一個字符串字符放在您的值的前面,並在您檢索時將其排除。要麼這樣做,要麼使用attr('data-') - 儘管在.data和.attr之間來回切換可能會導致您發現的不同結果。堅持一個或另一個。

相關問題