jQuery _data解析
jQuery Data,我们可以给一个html element, 或者是一个js object,来增加一个data 属性,我们可以像其他属性那样来读取,修改.而隐藏在其后面的是jQuery._data() 在起作用。
实现步骤:
- 首先确定那些html object不能实现data,如果我们来给它们添加属性会引起错误,
noData: {
"embed": true,
// Ban all objects except for Flash (which handle expandos)
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
"applet": true
},
唯一需要注意的是在object中,flash可以存数据。jQuery.acceptData(elem)用来完成这件事情。
- jQuery.expando是一个属性,当我们页面有多个jQuery的情况下,我们可以用这个来区分那个jquery来给object添加的data. 这样,我们可以解决IE6,IE7内存泄露的问题,我们可以用它来存储一系列的element,最后来实现清除。
- 我们只需要缓存一些html object, 因为js object,可以自动内存回收的。
cache = isNode? jQuery.cache: elem;
- 在读数据的时候,首先看当前element,有没有过被加上data,如果没有,则直接返回
- 对于每一个jQuery element,我们还得给它们不同的id来标识这些element
if (isNode) {
elem[internalKey] = id = jQuery.deletedIds.pop() || jQuery.guid++;
} else {
id = internalKey;
}
- 如果pvt为true,那么它们会把数据存储在cache[id]中,如果为false,那么它们会存储在cahce[id].data中。