Mat*_*att 40
看看它的来源.
从快速的一瞥看,它看起来像是将数据存储cache在第2行创建的变量中.
编辑:
这是一个快速演示,可以在缓存中找到数据:http://jsfiddle.net/CnET9/
您也可以转储$.cache到控制台并手动浏览它.
你似乎已经得到了答案,但这里有一点如何.在使用之前,您应该注意一些规则.
ADDING
使用从$('.selector')返回的对象添加变量.data()的工作原理是因为数据对象通过引用传递,所以在添加属性的任何地方都会添加它.如果在另一个元素上调用data(),它就会被更改.它就是它的本质......
var oData = $('#id').data();
oData.num = 0;
oData.num == $('#id').data().num; // true
Run Code Online (Sandbox Code Playgroud)
添加对象会将对象放置在数据对象内部,以及"扩展先前使用该元素存储的数据".- http://api.jquery.com/data/#entry-longdesc
这意味着向dataObj添加obj变为
oData.obj = {};
oData === { /*previous data*/, obj : { } }
Run Code Online (Sandbox Code Playgroud)
添加数组不会扩展先前存储的数据,但不会像简单值那样表现...
使用
如果存储了简单值,则可以将它们放入变量中,并在不更改数据对象的情况下使用它们执行所需操作.
然而
如果您使用对象或数组在元素上存储数据,请注意!
仅仅因为你将它存储到变量并不意味着你没有改变数据值.仅仅因为你将它传递给函数并不意味着你没有改变数据值!
它就是它的本质..除非它很简单..那它只是一个副本.: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!
Run Code Online (Sandbox Code Playgroud)
所以,资源..
为jQuery的$ .data()存储多个值的最佳方法是什么? /sf/answers/403191841/
| 归档时间: |
|
| 查看次数: |
14857 次 |
| 最近记录: |