demoshop

demo, trying to be the best_

官方網站
http://api.jquery.com/jQuery.data/

demo 剛剛在抓一個 Bug 的時候發現了這個有趣的事情,以往如果我們想利用 HTML 多記錄一些東西可能會使用自定屬性的方式來達成目標,但是在 HTML 5 出現後,這種自定屬性的部份都改用 data-* 來取代,後來 jQuery 也支援直接用  jquery.data() 方法就可以直接取值,於是就沒有不用的道理了,用了那麼久我倒是第一次發生這有趣的問題。

注意事項jQuery 1.8 後已經移除自動轉換的功能,所以可以取到正確的值了,讀者可以使用下方貼的 jsFiddle 工具修改載入的 jQuery 版本測試。


demo廢言案發現場是因為同時有許多值要記錄,id 和 rel 這些都已經有在使用了,於是就請出 data-* 來記錄相關的值,類似如下

<div id='test' data-int='5681147591416693361' data-a='9007199254740992' data-str='ohiyo'>AAAAA</div>

●要取 data 的值當然也很自然的使用

$('#test').data('int')

●但是奇怪的事情發生了,我竟然取到 【5681147591416694000】

找遍了整個 DOM 並沒有這個值,於是在反覆測試的情況下發現到,如果使用 data() 來取數值型態的值,最大值將不可以超過PB,也就是千兆,不過我並沒有深入的研究為什麼會有這限制,因此如果你有這種數值會大過千兆的情況,請改用 attr() 來取值,才不會造成失真,下面是一個範例各位可以玩玩看。

 


demo廢言經由了多方詢問後了解到 javascript 的 int 並不是我之前認為的 PB (2^50)大小,正確值為 2^53 ,所以數值只要超過了這個值就會爆掉。

 

回應討論