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

wil*_*age 79 html javascript jquery json

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

<div data-stuff="['a','b','c']"></div>
Run Code Online (Sandbox Code Playgroud)

然后像这样后退:

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

alert(stuff[0]);
Run Code Online (Sandbox Code Playgroud)

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

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

Aln*_*tak 135

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

发生这种情况是因为您的字符串不是有效的JSON,它应该使用双引号作为字符串分隔符而不是单引号.然后,您必须使用单引号来分隔整个属性值.

如果您修改了引号,则原始代码可以正常工作(请参阅http://jsfiddle.net/ktw4v/12/)

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

var stuff = $('div').data('stuff');
Run Code Online (Sandbox Code Playgroud)

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

  • 它应该使用双引号,但是你必须使用单引号来包含HTML属性. (5认同)
  • 事实上,['a','b','c']不是有效的JSON;) (4认同)
  • ['a','b','c']无效JSON (2认同)

Joh*_*een 12

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

所以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]);
Run Code Online (Sandbox Code Playgroud)

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

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

  • 不,将其声明为无效JSON意味着它被视为字符串. (4认同)