jQuery .data()追加

时间:2013-08-04 06:56:41

标签: javascript jquery jquery-data

所以这是我的情景:我有几个问题,用户回答,我想存储它们,所以在调查问卷的最后,我可以呈现每个问题和答案的列表。显然我可以使用全局变量,但问题是网站上还有其他问卷。我的解决方案是使用jQuery的.data()。 我的问题是,当我尝试添加类似的数据时,它会覆盖之前的数据。 这是一个简单的例子:

<div id="test"></div>

$("#test").data({name:"foo",answer:"bar"});
$("#test").data({name:"john",answer:"doe"});

console.log($("#test").data()); //logs name:"john",answer:"doe"

如何保持两个值?

3 个答案:

答案 0 :(得分:2)

您正在编写以前的数据,在数组中单个调用中添加两个记录。

<强> Live Demo

$("#test").data([{name:"foo",answer:"bar"}, {name:"john",answer:"doe"}]);

访问数组,

等数据
alert($("#test").data()[0].name);
alert($("#test").data()[1].name);
根据评论

编辑,如果您想依次向数据添加记录,则可以使用键值对。

<强> Live Demo

$("#test").data("1", {name:"foo",answer:"bar"});
$("#test").data("2", {name:"john",answer:"doe"});

正如@Heart所指出的那样,这个数据是否重要,那么客户端上的存储是为客户开放的,可以修改。使用ssl并在用户从用户处获取它时可以节省数据安全性。

答案 1 :(得分:1)

为什么不尝试使用key添加它们?

$("#test").data("Answer1", {
    name: "foo",
    answer: "bar"
});
$("#test").data("Answer2", {
    name: "john",
    answer: "doe"
});

console.log($("#test").data());
/*
//Console Output
 [object Object] {
   Answer1: [object Object] {
     answer: "bar",
     name: "foo"
   },
   Answer2: [object Object] {
     answer: "doe",
     name: "john"
   }
  }
*/

这样你的对象就是唯一的。演示:http://jsbin.com/ixuqal/1/edit

答案 2 :(得分:0)

我认为最简单的解决方案是首先从元素中获取数据,将其存储在变量中,追加新数据,然后将数据重新添加到元素中。

var data = [];
//get your existing data
data.push($("#test").data());
//add your new data
data.push({name:"john",answer:"doe"});
$("#test").data(data);