如何将值从元素推送到jQuery data()对象?

时间:2013-05-02 18:12:59

标签: jquery

假设你有这个:

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

当您在阅读/检查数据时,在javascript中的某个位置,您希望将更多值推送到“键”。

这显然不起作用:

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

这也不起作用:

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

我还没有发现这一点:

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

我必须在这里遗漏一些东西。

3 个答案:

答案 0 :(得分: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可以正确地将其解析为对象。也用引号包装值。

答案 1 :(得分: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将负责序列化数据并保存它。

答案 2 :(得分:0)

也许这会奏效:

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

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