Jquery data() 存储

7

有人能告诉我jquery data()将数据存储在哪里,以及何时擦除它吗?

如果我使用它来存储ajax调用结果,是否会有性能问题?

例如:

$("body").data("test", { myData: 'abcd'});

它仅存储在客户端,我使用了jQuery数据和jQuery元数据插件来检索数据,并且从未遇到任何问题。 - kobe
2个回答

29

所有数据都存储在名为cachejQuery对象属性中。在控制台中记录$.cache的内容,以查看与任何DOM元素相关联的所有数据和事件。

jQuery将DOM对象与缓存中的对象链接起来的方式是通过操作DOM对象。假设我们有一个输入元素

<input type="text" value="hello" />

其中有一个名为“foo”的数据键。

$(e).data("foo", "bar");

现在jQuery维护一个类似于jQuery<当前毫秒时间戳>的随机字符串,例如jQuery1291790929680,也可以通过$.expando访问。对于每个具有关联数据项或事件的DOM对象,jQuery将此expando字符串添加为键。因此,上述输入元素的DOM对象将包含此expando键及其对应的整数值,例如:

jQuery1291790929680: 4

4只是一个随机的例子,但这个数字表示$.cache对象中的一个索引,存储了与此DOM对象相关联的数据和事件。因此,根据这些信息,要检索上面输入元素的数据,我们可以间接地编写:

$.cache[4]["foo"]

应该返回 "bar",这是一种间接写法,相当于 $(e).data("foo")

上面的荒唐行为有一个演示例子 :)


我非常感激您的解释。 - ANP

3

查看来自jQuery的内容

jQuery.data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素上,从而避免了循环引用,因此不会产生内存泄漏。 jQuery确保在通过jQuery方法删除DOM元素时删除数据,并在用户离开页面时删除数据。我们可以为单个元素设置多个不同的值,并稍后检索它们:


感谢 @gov。但在以下文章中http://apheliondynamics.com/blog/2010/01/19/the-power-of-jquery-data-and-a-practical-example/article提到,data()将内容存储在缓存中。因此,当实际清除缓存时,我感到困惑! - ANP
@ANP 前往此页面,http://www.art.com/gallery/id--c23944/fine-art-prints.htm?ui=351BF178E486494982CDA4842EB6BD55,并查看隐藏值的源代码,然后清除浏览器缓存,仍然可以看到这些值///它们作为DOM结构的一部分存储,我认为它们不会存储在缓存中... - kobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接