jQuery .data()如何工作?

我想在我的应用程序中使用.data() 。 这些例子是有帮助的,但是我不明白这些值存储在哪里。

我用Firebug检查网页,只要.data()将一个对象保存到一个dom元素,我看不到在Firebug(HTML或Dom选项卡)中的任何更改。

我试图看看jQuery的源码,但它是非常先进的我的Javascript知识,我迷失了自己。

所以问题是:

jQuery.data()存储的值实际上在哪里? 我可以使用工具检查/定位/列出/debugging它们吗?

看看它的来源 。

从一瞥中,它看起来像将数据存储在第2行创build的cachevariables中。

编辑:

下面是一个快速演示,在caching中查找数据: http : //jsfiddle.net/CnET9/

您也可以将$.cache转储到您的控制台并手动探索。

你似乎已经得到了答案在哪里,但这里有一点如何。 在使用这个之前,你应该注意一些规则。

ADDING

使用从$('。selector')。data()返回的对象来添加variables,因为数据对象是通过引用传递的,所以在添加属性的任何地方,都会被添加。 如果你在另一个元素上调用data(),它会被改变。 这是它是什么…

 var oData = $('#id').data(); oData.num = 0; oData.num == $('#id').data().num; // true 

添加一个对象将一个对象放在数据对象的内部,以及“扩展先前存储在该元素中的数据”。 – http://api.jquery.com/data/#entry-longdesc

这意味着添加一个obj到dataObj变成了

 oData.obj = {}; oData === { /*previous data*/, obj : { } } 

添加一个数组不会扩展以前存储的数据,但不会像简单的值一样运行…

使用

如果存储了简单的值,则可以将它们放入variables中,并在不更改数据对象的情况下执行所需的操作。

然而

如果您使用对象或数组将数据存储在元素上,请注意!

只是因为你把它存储到variables中并不意味着你不改变数据值。 只是因为你把它传递给一个函数并不意味着你不改变数据值!

这就是它是什么..除非它很简单..那么它只是一个副本。 :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! 

所以,资源..

什么是最好的方法来存储jQuery的$ .data()的多个值? https://stackoverflow.com/a/5759883/1257652

你可以通过调用没有参数的.data()来检查它,像这样:

 $("div").data("thing", "value");​​​​​​ console.log($("div").data()); //or... console.log($.data($("div").get(0))); 

至于“哪里”,它存储在一个全局的jQuerycaching对象下,代表你的元素的一个键。 调用.data()实际上会返回jQuery.data(yourDomElement) ,或者如果您从中调用特定的值,则调用一个键。