2011-05-20 44 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" 
}); 
相关问题