2011-05-20 25 views

回答

119

它將您的變量視爲一個字符串,第零個元素爲[

這是因爲你的字符串不是valid JSON,它應該使用雙引號作爲字符串分隔符而不是單引號。然後您必須使用單引號來分隔整個屬性值。

如果您解決您的引號原代碼的工作(見http://jsfiddle.net/ktw4v/12/

<div data-stuff='["a","b","c"]'> </div> 

var stuff = $('div').data('stuff'); 

jQuery的時候看到有效的JSON的數據屬性它將automatically unpack it for you

+2

INFACT,[「一」,「B」,「C」]不是有效的JSON) – stecb 2011-05-20 12:15:30

+2

['a','b','c']是無效的JSON – Mutt 2011-05-20 12:15:44

+0

是的,我的想法確切。爲什麼這個錯誤? http://jsfiddle.net/ktw4v/10/ – wilsonpage 2011-05-20 12:15:49

8

將它聲明爲屬性意味着它是一個字符串。

所以stuff[0]將相當於:var myString = "['a','b','c']"; alert(myString[0]);

你需要使它看起來像這樣:

<div data-stuff="a,b,c"></div> 

var stuff = $('div').data('stuff').split(','); 
alert(stuff[0]); 

回縮:因爲它不符合parseJSON規則jQuery的解析失敗。

但是,我會支持我的解決方案。其他方面有些方面並不理想,就像這種解決方案在某些方面不夠理想一樣。一切取決於你的範例。

+4

不,將其聲明爲無效JSON意味着它被視爲一個字符串。 – Alnitak 2011-05-20 12:33:14

+0

@Alnitak - 儘管這可能是jQuery對待它的方式 - 我沒有在jQuery Api參考中看到這一點,並且在w3c規範中肯定不太清楚。由於在dom對象中定義JSON會打破w3c的「中立性」,這似乎是一個jQuery擴展,或者由於缺乏文檔 - 怪癖。無論如何,儘管我不能說在這一點上我同意你的看法 - 我並不是那麼pe that,以至於我要去除你得到的第一個+1。 :) – 2011-05-20 12:48:24

+0

@John它是在jQuery API中記錄的 - 「每一次嘗試都將字符串轉換爲JavaScript值(這包括布爾值,數字,對象,數組和空值),否則它將作爲字符串保留。 – Alnitak 2011-05-20 12:51:21

-4

另一種方法發佈在jsfiddle; var stuff = $('div').data('stuff');東西是零字符作爲一個字符串「[」

好,var stuff = eval($('div').data('stuff'));應該給你一個數組

+3

eval是邪惡的:)總有一個更好的方法 – 2014-02-28 14:03:46

+0

請調整你的答案說,雖然可能的解決方案,eval()可能會導致獨角獸死... http://stackoverflow.com/questions/86513/why -is-使用最JavaScript的的eval函數-A-壞主意 – 2014-08-05 15:25:28

-1

正如其他人所確定的值作爲字符串,它返回「[」處理。請試試這個(AAA是div的名字,我拿出了數據的東西):

$(function(){ 
    $.data($("#aaa")[0],"stuff",{"aa":['a','b','c']}); 
    var stuff = $.data($("#aaa")[0],"stuff").aa; 
    alert(stuff[0]); //returns "a" 
}); 
相關問題