有人能告诉我jquery data()
将数据存储在哪里,以及何时擦除它吗?
如果我使用它来存储ajax调用结果,是否会有性能问题?
例如:
$("body").data("test", { myData: 'abcd'});
有人能告诉我jquery data()
将数据存储在哪里,以及何时擦除它吗?
如果我使用它来存储ajax调用结果,是否会有性能问题?
例如:
$("body").data("test", { myData: 'abcd'});
所有数据都存储在名为cache
的jQuery
对象属性中。在控制台中记录$.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")
。
上面的荒唐行为有一个演示例子 :)
查看来自jQuery的内容
jQuery.data()方法允许我们以一种安全的方式将任何类型的数据附加到DOM元素上,从而避免了循环引用,因此不会产生内存泄漏。 jQuery确保在通过jQuery方法删除DOM元素时删除数据,并在用户离开页面时删除数据。我们可以为单个元素设置多个不同的值,并稍后检索它们: