为什么我的 .data() 函数返回 \[ 而不是数组的第一个值?

新手上路,请多包涵

我想将一个数组传递给服务器端的 jQuery 数据属性,然后像这样检索它:

 var stuff = $('div').data('stuff');
alert(stuff[0]);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.6.1/jquery.min.js"></script>
<div data-stuff="['a','b','c']"></div>

为什么这会出现警告“[”而不是“a”(参见 JSFiddle 链接)

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

原文由 wilsonpage 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 251
2 个回答

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

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

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

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

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

当 jQuery 在数据属性中发现有效的 JSON 时,它会 自动为您解包

原文由 Alnitak 发布,翻译遵循 CC BY-SA 3.0 许可协议

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

所以 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的规则。

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

原文由 John Green 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题