jQuery.data()是否存储jQuery DOM对象的引用或深层副本?

时间:2012-12-08 10:34:52

标签: javascript jquery

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

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

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

2 个答案:

答案 0 :(得分:11)

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

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

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

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

因此,在我看来,你做得很好,效率很高。

答案 1 :(得分:7)

您可以直接查看源代码,yay代码是开源的:)

Lines 51 & 52 of data.js有一个有用的评论:

  

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

     

//浅被复制到现有缓存

所以我猜这是一个浅薄的副本!

更新07/14 - 该链接指向head:master所以现在已经完全过时了,这是我正在谈论的内容的规范链接:as at 16ba6ff