如何将数组传递给jQuery .data()属性

时间:2011-05-20 12:03:14

标签: javascript jquery html json

好的,我想将一个非常基本的数组传递到jquery数据attrubute服务器端,如下所示:

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

然后像这样后退:

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

alert(stuff[0]);

为什么这似乎警告'['而不是'a'(参见JSfiddle链接)

JSFiddle链接: http://jsfiddle.net/ktw4v/3/

4 个答案:

答案 0 :(得分:134)

它将您的变量视为一个字符串,其第0个元素为[

这种情况正在发生,因为你的字符串不是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

答案 1 :(得分:11)

将其声明为属性意味着它是一个字符串。

所以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]);

撤回:jQuery的解析失败,因为它不符合parseJSON的规则。

但是,我会支持我的解决方案。其他方面的某些方面并不理想,就像这种解决方案在某些方面不够理想一样。一切都取决于你的范例。

答案 2 :(得分:-2)

正如其他人已经确定的那样,该值被视为字符串,因此返回“[”。请尝试这个(aaa是div的名称,我拿出了数据):

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

答案 3 :(得分:-4)

jsfiddle发布了另一种方法; var stuff = $('div').data('stuff');内容是第0个字符的字符串'['

好吧,var stuff = eval($('div').data('stuff'));应该为你提供一个数组