12

我正在使用 jQuery.data() 来存储 jQuery DOM 对象引用:

myObj.data('key', $('#element_id'));

我会经常使用它(通常用于相同的 DOM 对象),所以我不想占用太多内存。jQuery 是存储引用,还是存储 DOM 对象的深层副本?在这种情况下,我认为最好存储元素 id 而不是元素引用。

4

2 回答 2

12

您构建的 jQuery 对象$('#element_id')包含

  • 对上下文的引用(此处的文档)
  • 选择器
  • cached :找到的 dom 节点的长度(在您的情况下为 0 或 1)和引用
  • 指向原型的指针(以便您可以调用方法)

您存储在数据中(在节点中)的是 jQuery 对象。该对象不包含所引用 DOM 节点的任何深层副本,因此您存储的不是深层副本,而是一个主要包含字符串和一些指针的小对象。

并且由于 DOM 节点引用被缓存,它比仅具有 id 更有效(稍微,因为通过 id 查找节点总是很快,但如果您有一个更复杂的选择器,这会有所不同)。

所以在我看来,你所做的事情是好的和有效的。

于 2012-12-08T10:40:49.750 回答
7

您总是可以直接查看源代码,欢迎开源:)

data.js 的第 51 和 52 行有有用的评论:

// 可以将对象传递给 jQuery.data,而不是键/值对;这得到

// 浅拷贝到现有缓存中

所以我猜这是一个浅拷贝!

更新 07/14 - 该链接是 head:master 所以现在完全过时了,这是我所说的规范链接:截至 16ba6ff

于 2012-12-08T10:45:21.540 回答