在使用它之前,您应该了解一些规则!
添加
使用从 $('.selector').data() 返回的对象添加变量是可行的,因为数据对象通过引用传递,所以无论您添加属性,它都会被添加。如果您在另一个元素上调用 data(),它会被更改。就是这样……
添加对象会将对象置于数据对象内部,并“扩展先前与该元素一起存储的数据”。 - http://api.jquery.com/data/#entry-longdesc
也就是说给dataObj添加一个obj就变成了
dataObj === { /*previous data*/, obj : { } }
添加数组并不会扩展之前存储的数据,但也不会像简单值那样表现...
使用
如果您存储了简单的值,您可以将它们放入变量中,并在不更改数据对象的情况下对它们做您想做的事情。
然而
如果您使用对象或数组在元素上存储数据,请注意!
仅仅因为您将其存储到变量中并不意味着您没有更改数据值。
仅仅因为你将它传递给一个函数并不意味着你没有改变数据值!
它就是它本来的样子......除非它很简单......那么它只是一个副本。 :p
var data = $("#id").data(); // Get a reference to the data object
data.r_redirect = "index.php"; // Add a string value
data.num = 0; // Add a integer value
data.arr = [0,1,2]; // Add an array
data.obj = { a : "b" }; // Add an object
// but here is where the fun starts!
var r_redirectString = data.r_redirect; // returns "index.php", as expected.. cool
r_redirectString = "changed" // change the value and the compare :
data.r_redirect == r_redirectString // returns false, the values are different
var oArr = data.arr; // Now lets copy this array
oArr.push(3); // and modify it.
data.arr == oArr // should be false? Nope. returns true.
// arrays are passed by reference.
// but..
var oObj = data.obj // what about objects?
oObj["key"] = "value"; // modify the variable and
data.obj["key"] == oObj["key"] // it returns true, too!
所以,资源..
What's the best way to store multiple values for jQuery's $.data()?
https://stackoverflow.com/a/5759883/1257652