为DOM节点添加太多的自定义属性的危害:
- 循环引用时的内存泄漏
- 直接暴露数据不安全
- 多自定义属性对浏览器来说无意义
- 取数据的时候要对HTML节点进行操作
jQuery缓存系统解决了这个问题。(从事件系统分化出来的)
静态方法: $.data(ele)
实例方法:$(ele).data()
$(ele).data()
是对$.data(ele)
的扩展,
$.data(ele)可为DOM元素或者js对象添加数据
$(ele).data()是为DOM节点添加数据,会覆盖key相同的值,
jQuery缓存系统核心
数据放在内存中,通过映射关系与绑定的DOM关联。
1.实例方法:
$(ele).data()
数据存储在
jQuery.cache
中,为DOM
元素分配属性expando
,值唯一,和缓存对象 jQuery.cache关联起来,则cache[id]
就会读到所有的这个节点的缓存,
cache结构如下:
var cache={
"id1":{
'name1':'value1',
'name2':'value2',
},
"id2":{
'name1':'value1',
'name2':'value2',
},
}
每个id对应一组缓存数据。所以属性名相同时会覆盖、
2.静态方法:
jQuery.data(ele,[key],[value]);
每个
ele
都有自己的{key,value}
对象,新建的对象即使key
相同也不会覆盖
var body1 = $("body")
var body2 = $("body")
$.data(body1, "bar", '一');
$.data(body2, "bar", '二');
show( $.data(body1, "bar") )
show( $.data(body2, "bar") )