假设你有这个:
<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')+'}');
我必须在这里遗漏一些东西。
答案 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"]
注意:我修复了您的数据属性以使其具有有效的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作为值。