jQuery.data()是如何工作的?

jQuery.data()是如何工作的?,jquery,client,storage,Jquery,Client,Storage,我想在我的应用程序中使用.data()。这些参数很有用,但我不知道这些值存储在哪里 我用Firebug检查网页,只要.data()将对象保存到dom元素,我就看不到Firebug(HTML或dom选项卡)中有任何更改 我试图查看jQuery源代码,但它对于我的Javascript知识来说非常先进,我迷失了方向 因此,问题是: jQuery.data()存储的值实际上去了哪里?我可以使用工具检查/定位/列出/调试它们吗?请查看相关信息 快速看一眼,它似乎将数据存储在第2行创建的缓存变量中 编辑:

我想在我的应用程序中使用
.data()
。这些参数很有用,但我不知道这些值存储在哪里

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

我试图查看jQuery源代码,但它对于我的Javascript知识来说非常先进,我迷失了方向

因此,问题是:

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

请查看相关信息

快速看一眼,它似乎将数据存储在第2行创建的
缓存
变量中

编辑:

下面是在缓存中查找数据的快速演示:


您还可以将
$.cache
转储到您的控制台并手动浏览它。

您可以通过不带参数的调用来检查它,如下所示:

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

至于“where”,它存储在一个全局jQuery缓存对象中,位于一个表示元素的键下。调用
.data()
确实会返回
jQuery.data(YourdElement)
,或者如果您从中调用了特定的值,则会在其上加上一个键。

您似乎已经得到了在何处的答案,但这里有一点关于如何实现的。 在使用此功能之前,您应该了解一些规则

添加

使用从$('.selector').data()返回的对象添加变量是有效的,因为数据对象是通过引用传递的,所以无论在哪里添加属性,都会添加它。如果在另一个元素上调用data(),它将被更改。它是什么它是什么它是什么

var oData = $('#id').data();
oData.num = 0;
oData.num == $('#id').data().num; // true
添加一个对象会将一个对象放置在数据对象内部,并“扩展先前与该元素一起存储的数据”。-

这意味着向dataObj添加一个obj将成为

oData.obj = {};    
oData === { /*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!
那么,资源


您应该使用firequery:
data()
使用数据扩展jquery DOM。。。你应该能看到他们发射火箭弹你看到缩小的火箭弹了吗?如果你这么做了,一点也不要难过,因为除了浏览器之外,几乎每个人都无法理解这一点。即使是非压缩源代码也非常先进,通常很难查看DI制作了一个实现示例:检查它,它非常简单:storeData(元素,数据)/->Register new data storeData(元素)/->Get data registeredNope,缓存变量只是一些jQuery内部的东西。数据实际上是附加到DOM元素的。顺便说一句:他没有指出jQ源代码没有帮助吗?那么为什么要指向他呢?@Techpriester-你错了,它存储在缓存变量中,使用一个表示DOM元素的键,而不是存储在DOM元素本身。因为我假设他直接查看的是jQuery源代码,而不是GitHub上组织良好的源代码。你可以使用$.cache[doElement[$.expando]]快速找到它:
$。自jQuery 2.0以来,缓存似乎已经消失了。