五、数据缓存Data0——整体梳理
jQuery的数据缓存模块以一种安全的方式为DOM元素附加任意类型的数据,避免了在JavaScript对象和DOM元素之间出现循环引用,以及由此而导致的内存泄露。
数据缓存模块为DOM元素和JavaScript对象提供了统一的数据设置、读取和移除方法,除了维护jQuery内部数据以外,它还支持用户自定义数据。
jQuery.hasData(elem) 判断一个DOM元素或JavaScript对象是否有关联的数据
jQuery.data(elem, name, data) 为DOM元素或JavaScript对象设置任意类型的数据,或返回指定名称的数据,或返回关联的数据缓存对象,改方法的功能取决于参数的个数和类型。
jQuery.removeData(elem, name) 移除通过jQuery.data()设置的数据。
.data(key, value) 为选中的DOM元素设置或读取自定义数据,解析HTML5属性data-,并触发自定义事件getData、setData、changeData
.removeData(key) 移除通过.data()设置的自定义数据
在jQuery内部,数据缓存模块为队列模块、动画模块、样式操作模块、事件系统提供基础功能,负责维护这些模块运行时的内部数据。
实现原理
jQuery.hasData(elem) 判断一个DOM元素或JavaScript对象是否有关联的数据
jQuery.data(elem, name, data, pvt) 为DOM元素或JavaScript对象设置任意类型的数据,或返回指定名称的数据,或返回关联的数据缓存对象,改方法的功能取决于参数的个数和类型。参数pvt仅在jQuery内部使用。
jQuery.removeData(elem, name, pvt) 移除通过jQuery.data()设置的数据。参数pvt仅在jQuery内部使用。
1. 为DOM元素附加数据
在数据缓存模块中,会为每个DOM元素分配一个唯一id并附加到DOM元素上,同时会把该id作为属性添加到全局缓存对象jQuery.cache中,对应的属性值是一个JavaScript对象,该对象被称为“DOM元素的数据缓存对象”,其中存储着数据名和数据的映射。也就是说,通过分配一个唯一的id把DOM元素和该DOM元素的数据缓存对象关联起来。有以下几个关键点:
1、对于DOM元素,数据缓存模块把所有数据都存储在全局缓存对象jQuery.cache中。
2、唯一id是一个整体值,初始值为0,每次分配时自动加1
3、唯一id被附加到以jQuery.expando的值命名的属性上,例如,jQuery123456789,类似一个随机数,以避免与用户自定义属性冲突。
4、为DOM元素设置数据时,如果该DOM元素没有关联id,才会为之分配一个唯一id。

浙公网安备 33010602011771号