jQuery 之缓存
来源:互联网 发布:网络舆情汇报 编辑:程序博客网 时间:2024/05/01 00:30
1.前言
在后台中,某栏目添加多个单品,输入单片链接之后需要进行ajax请求该单品的详细数据,点击“保存”按钮,需要将所有的单品数据进行汇总为json并保存。
给文本框的blur添加事件进行ajax请求后数据的存储成为一个问题,偶然看jquery源码时,发现.data是一个不错的实现。
2.使用
jQuery.data可以为普通对象或是DOM element 附加及获取数据,分为以下三类:
1)用name,value给普通对象赋值 $.data(obj,name,value),获取数据$.data(obj,name)
2)用另一个对象给普通对象赋值 $.data(obj,another), 获取数据$.data(obj,name)
3)给DOM element元素赋值 $.data(element,name,value) ,获取数据$.data(element,name)
3.详细
1》给普通对象赋值解析
给对象赋值时,其实就是将一个“cache”附加到了对象上,并使用了一个特殊的属性名称
如上图所示:obj多了一个属性名:jQuery112100953224126715213 在该属性下存放了数据。
属性名的生成:var expando="jQuery"+("1.2"+Mah.random()).replace(/\D/g,''); //jquery版本加随机数,特殊名称,并用于标识不同的页面,它是jQuery引入到页面后随即生成的。
2》给DOM element元素赋值
因为在一些浏览器中(IE6,7)不能有效回收DOM element上附加的对象引用,所以采用不同的方式来附加数据
使用了cache,并附加uid(唯一且递增),不直接保存在DOM element上,保存于jQuery.cache上。uid附加在DOM Element 的 “expando” 属性中。 var id = obj[expando] = obj[expando] || ++uuid;
另,有的Dom element具有其他的“事件”之类的。为防止被用户覆盖不能使用,缓存附加的属性不在jQuery164....该属性的下面。与其实兄弟平级。
如果想覆盖也是可以的,$.data中第四个参数为true(默认为false)此时修改的是expando内部的events
4.简单实现
查了一下有网友对这部分内容的简单实现,敲了一下,附上代码:
$=function(){var globleCache={};var expando=jQuery+("1.6"+Math.random()).replace(/\D/,''); //过滤非数字var uuid=0;function getcache(obj){ //根据对象的不同选择不同的存储位置if(obj.nodeType){ //DOM element var id=obj[expando]=obj[expando]||++uuid; //uuid 自增globleCache[id]=globleCache[id]||{};return globleCache[id];}else{obj[expando]=obj[expando]||{};return obj[expando];}}function getdata(cache,name){ //获取缓存值 return cache[name];}function setdata(cache,name,value){ //插入缓存值return cache[name]=value;}function setdatawithobject(cache,another){ //将对象向对象赋值 for(var name in another){ cache[name]=another[name]; }}return{data:function(obj,name,value){var cache=getcache(obj);if(name instanceof Object){ //值为另一个对象 setdatawithobject(cache,name);}else if(value===undefined){getdata(cache,name);}else{setdata(cache,name,value);}}} }
- jQuery 之缓存
- jquery之缓存
- jQuery之缓存数据
- jquery之清除ajax缓存
- 读jquery之六(缓存数据)
- JQUERY注意问题之ie8 post缓存
- 解决jquery之get缓存问题方法
- 读jQuery之六(缓存数据)
- jQuery源码之$.data()数据缓存
- 读jQuery之六(缓存数据)
- JQuery缓存
- jquery缓存
- jquery缓存
- jquery缓存
- 解决jquery之get缓存问题的最简单方法
- Jquery Mobile学习教程之预加载与页面缓存
- javascript数据缓存策略之本地存储 与jquery cache 缓存
- jQuery映射,缓存jQuery对象
- spring+junit进行单元测试
- sql语句_SELECT INTO 语句
- linux 文件及命令(五)
- springmvc 原理解析
- 关于今天在用spring字符集过滤器遇到的问题
- jQuery 之缓存
- Hbuilder/H5 功能汇总
- @SuppressLint("NewApi")和@TargetApi()的区别
- webrtc测试服务器编译和搭建
- MVVM初识
- Zigbee性能分析
- PHP+mysql链接
- jQuery 放大镜(面向过程)
- RecyclerView的使用教程1