1

Suppose you have this:

<a href="#" data-mydata="{'key':[value1, value2, value3]}">LINK</a>

And somewhere in your javascript when you are reading/checking that data you want to push more values to 'key.'

This obviously does not work:

var mykey = $('a').data('mydata').key;
$('a').data('mydata', mykey.push('value4'));

This doesn't work either:

var mykey = $('a').data('mydata').key;
$('a').data('mydata.key', mykey.push('value4'));

I haven't found this to work either:

var mykey = $('a').data('mydata').key;
$('a').data('mydata', '{"key":'+mykey.push('value4')+'}');

I must be missing something here.

4

3 回答 3

1

直接更新mykey

var mykey = $('a').data('mydata').key;
mykey.push('value4');
console.log(mykey); //                   ["value1", "value2", "value3", "value4"]
console.log($('a').data('mydata').key)// ["value1", "value2", "value3", "value4"]

http://jsfiddle.net/ewDaB/

注意:我将您的数据属性修复为具有有效的 json,以便 jQuery 可以正确地将其解析为对象。还将值用引号括起来。

于 2013-05-02T18:20:45.640 回答
0

Eval 有效,但正如 gdoron 提到的那样被认为是危险的。在 jQuery 数据中设置对象的方法是只设置它们而不自己序列化它们。所以最好的方法是这样做:

values = $('a').data('mydata').key;
values.push('value4')
$('a').data('mydata', {'key': values});

但这意味着您不应该以这种方式在 html 元素上设置 data-mydata 属性,而应该使用 jQuery 动态设置它:

$('a').data('mydata', {'key': [value1, value2, value3] }); 

您可以在页面加载时调用它来初始化元素上的数据。jQuery 将负责序列化数据并保存它。

于 2013-05-02T18:20:05.643 回答
0

也许这会起作用:

var mykey = $('a').data('mydata').key;
mykey.push('value4');
$('a').data('mydata', mykey);

我不确定最后一行,但是您可以在这里尝试三个示例。但是使用数组而不是 arra.push 作为值。

于 2013-05-02T18:21:11.153 回答