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

好的,所以我想要传递一个非常基本的数组到一个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/

它把你的variables看作一个string,其第零个元素是[

这是因为你的string不是有效的JSON ,它应该使用双引号作为string分隔符而不是单引号。 您将不得不使用单引号分隔整个属性值。

如果您修复了您的原始代码的引号(请参阅http://jsfiddle.net/ktw4v/12/

 <div data-stuff='["a","b","c"]'> </div> var stuff = $('div').data('stuff'); 

当jQuery在数据属性中看到有效的JSON时,它会自动为你解压 。

将其声明为属性意味着它是一个string。

所以stuff[0]将等同于: var myString = "['a','b','c']"; alert(myString[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的parsing失败,因为它不符合parseJSON的规则。

但是,我会站在我的解决scheme背后。 其他方面还有一些不尽如人意的地方,就像这个解决scheme在某些方面不太理想一样。 一切都取决于你的范例。

正如其他人已经确定的价值被视为string,所以它返回“[”。 请试试这个(aaa是div的名称,我拿出了数据):

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

jsfiddle发布了一个不同的方法; var stuff = $('div').data('stuff'); 东西是一个string,第0个字符为'['

那么, var stuff = eval($('div').data('stuff')); 应该给你一个数组