jQuery缓存数据——仿Map

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

       最近在工作中遇到了这样一个情景。有些数据是从后台读取的,但是我暂时不需要展示在页面上,那怎么办呀?——缓存呀。今天我就来分享一下我所了解的Jquery缓存数据的方法。


       首先分享1篇博文——《读jQuery之六(缓存数据)》,还有2个文档:Jquery中的.data()方法,以及jQuery.data()方法。通过这些资料,你应该就会对缓存数据有了一定的了解。具体的介绍文档里已经说的很清楚了,我要分享的是自己写的一些js方法。


       在JAVA开发中,我们需要缓存数据,一般都选择放在了Map中。就算是放在各种缓存框架,也基本上都是以Key/Value的方式存放起来的。既然现在要在页面上缓存数据,那么我们就模仿Map来实现缓存数据的功能吧。


       jQuery.data()是一个底层的方法,所以我们尽量使用.data()的方法来完成这个功能。方法说明如下:



       根据说明,进行存储数据。由于是做缓存的,属于页面全局所有的。所以元素就选择body。具体代码如下:

var map = {/*** 缓存数据* 如果当前key已缓存了值,则抛出existed异常*/put : function(key,value,override) {if(!this.get(key)) {var arr = new Array();arr.push(value);$("body").data(key, arr);}else if(override){//覆盖this.update(key, value);}else{throw new Error(key + " existed");}},/*** 更新缓存数据*/update:function(key,value,idx,name){if(!this.get(key)) {throw new Error(key + " is non-existed");}else{var arr = this.get(key);if(idx || idx>=0){if(arr[idx] instanceof Array){//数组的话this.remove(key);this.put(key,value,true);}else if(arr[idx] instanceof Object){if(typeof(value)=='number'){eval("arr["+idx+"]."+name+"="+value);}else{eval("arr["+idx+"]."+name+"='"+value+"'");}}}else{this.remove(key);this.put(key,value,true);}}},/*** 在同一个key中追加数据*/        append:function(key, value) {if(!this.get(key)) {var arr = new Array();arr.push(value);$("body").data(key, arr);}else{//覆盖var arr = this.get(key);arr.push(value);$("body").data(key, arr);}},/*** 移除缓存* 如果当前key已缓存了值,则抛出non-existed异常*/remove:function(key){if(this.get(key)) {$("body").removeData(key);}else{throw new Error(key + " is non-existed");}},/*** 移除所有缓存数据*/            removeAll:function(){$("body").removeData();},/*** 获取缓存数据*/      get:function(key) {return ($("body").data(key) ? $("body").data(key) : undefined);},/*** 获取缓存数据数组,结果为数组类型*/  getArray:function(key){return $("body").data(key);},/*** 获取所有缓存数据,结果为对象类型*/    getObject:function(){return $("body").data();}}

       这段代码采用了面向对象的思想,提供了get、update、append、remove等方法,并 对方法进行了封装,足够满足你的需求。测试代码如下:

<body><textarea id="scripts" row="3" style="width:800px;height:540px">map.removeAll();//移除所有的缓存数据map.put("user","zhangsan");//添加缓存$("#result").text("姓名:" + map.get("user"));$("#wait").text("  [1秒后会更新该值]");setTimeout(function (){$("#wait").text("");$("#result").text("");var user = {name:'lisi'};map.update("user",user);//更新缓存$("#result").text("姓名:"+map.get("user")[0].name);    $("#wait").text("  [1秒后会更新该值]");      setTimeout(function(){$("#wait").text("");$("#result").text("");map.update("user",22,"age",0);//更新缓存map.update("user","xx市xx街xx号","addr",0);//更新缓存var user = map.get("user")[0];$("#result").text("姓名:"+user.name+' 年方:'+user.age+" 家住:"+user.addr);$("#wait").text("  [1秒后会更新该值]");},1000);setTimeout(function(){$("#wait").text("");$("#result").text("");var user2 = {name:'zhangsan'};map.append("user",user2);//追加缓存$("#result").text("姓名1:"+map.get("user")[0].name+' ,姓名2:'+map.get("user")[1].name);  $("input").show();},2000);},1000);</textarea><br/><br/>执行结果:<span id="result" style="color:#ff0000"></span><span id="wait"></span><br/>---------------------------------------------------<br/>预计结果:<br/>姓名:zhangsan<br/>姓名:lisi<br/>姓名:lisi 年方:22 家住:xx市xx街xx号<br/>姓名1:lisi ,姓名2:zhangsan <br/><br/><input type="button" onclick="eval($('#scripts').val());" value="运行测试"> <input type="button" style="display:none;" onclick="alert(map.get('user')[0].name)" value="获取第一个缓存的name值"> <input type="button" style="display:none;" onclick="alert(map.getArray('user').length)" value="获取缓存的数量"> <input type="button" style="display:none;" onclick="alert(JSON.stringify(map.get('user')[0]))" value="获取第一个用户的详细信息"> 
</body>

       点击这个可以在线查看运行结果。

版权声明:本文为博主原创文章,未经博主允许不得转载。

转载于:https://my.oschina.net/u/2260184/blog/518490

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/262657.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【摘抄】百度分词算法详解:查询处理以及分词技术

随着搜索经济的崛起&#xff0c;人们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业&#xff0c;会根据搜索引擎的知名度以及日流量来选择是否要投放广告等&#xff1b;作为 普通网民&#xff0c;会根据搜索引擎的性能和技术来选择自己喜欢的引擎查找资料&#x…

Jsoup快速查询

一、selector选择器 二、Xpath查询 转载于:https://www.cnblogs.com/wmqiang/p/11568184.html

ShellAPI 调用搜索引擎

//调用搜索引擎 uses ShellAPI;//google web searchprocedure TForm1.Button1Click(Sender: TObject);var SearchStr:PWideChar; SearchEngineStr:string;begin SearchEngineStr:http://search.yahoo.com/search?p; SearchStr:PWideChar(SearchEngineStr Edit1.Text); …

read name 和 read 在 Bash 中的区别

read 带一个参数和不带参数的区别是什么&#xff0c;我本以为仅仅是被赋值的变量的名字不同而已&#xff1a; $ read name 1 $ echo "$name" 1 $ read 1 $ echo "$REPLY" 1 当没有指定变量名时&#xff0c;read 会给默认的变量 REPLY 赋值&#xff0c;仅此…

李开复:2009地图与移动搜索快速增长

新浪科技讯 2月20日下午消息&#xff0c;谷歌大中华区总裁李开复今日召开媒体见面会&#xff0c;探讨谷歌2009年的发展重点和方向&#xff0c;李开复称地图与移动搜索将会迅速成长。以下为文字实录&#xff1a; 李开复&#xff1a;Google每次有员工大会&#xff0c;会把在北京、…

Qt SD卡 文件系统挂载、文件预览

/*********************************************************************************** Qt SD卡 文件系统挂载、文件预览* 声明&#xff1a;* 1. 验证挂载SD卡&#xff1b;* 2. QTreeView显示文件系统文件&#xff1b;* 3. UI线程、普通…

c# 文件压缩、解压及下载

C#打包文件夹成zip格式&#xff08;包括文件夹和子文件夹下的所有文件&#xff09; C# 文件压缩与解压(ZIP格式) asp.net实现文件夹及文件压缩&#xff0c;并实现下载转载于:https://www.cnblogs.com/myparamita/archive/2012/06/04/2534206.html

Servlet生命周期和方法

一、五个生命周期方法&#xff0c;有三个很重要&#xff0c;初始化方法、提供服务方法和销毁方法 1、三个主要方法 2、另外两个重写的成员方法只做了解 二、生命周期详解 其中&#xff0c;每次刷新页面都是一次对servlet访问&#xff1b; 页面访问&#xff0c;根据域名找到主机…

如何查看端口被占用

最近在做有关WCF的系统&#xff0c;可能是在方法回调的过程中会默认通过TCP&#xff1a;80端口&#xff0c;报错为80端口被占用&#xff0c;然而我又不知道什么程序占用了80端口&#xff0c;上网一找&#xff0c;没想真不少人碰到我一样的问题&#xff0c;嘿嘿。 run "net…

centos7 搭建Docker Registry

registry2.x版本比1版本的速度快而且加了认证环境规划&#xff1a;192.168.0.167Registry192.168.0.168client192.168.0.1671.安装并启动docker#添加yum源 [rootRegistry ~]# sudo tee /etc/yum.repos.d/docker.repo <<-EOF [dockerrepo] nameDocker Repository baseurl …

Servlet3.0注解配置访问路径和urlParttern配置

一、Servlet用注解配置访问路径 二、IDEA的tomcat相关配置 其中&#xff0c;第一点的配置文件&#xff0c;直接在IDEA的可视化操作界面修改就可以改掉配置文件中内容&#xff1b; 三、urlParttern配置 其中&#xff0c;* 时通配符&#xff0c;优先级最低&#xff1b; 转载于:ht…

现货黄金入门知识普及一:图形分析之K线理论

&#xff2b;线又称阴阳线、棒线、红黑线或蜡烛线&#xff0c;最早起源于日本德川幕府时代的米市交易&#xff0c;经过二百多年的演进&#xff0c;现已广泛应用于证券市场的技术分析中&#xff0c;成为技术分析中的最基本的方法之一&#xff0c;从而形成了现在具有完整形式和分…

phpweb2.0 开发实战 ----- 配置虚拟主机

配置虚拟主机apache&#xff1a;同一个IP不同的主机一、加载&#xff1a;LoadModule rewrite_module modules/mod_rewrite.so&#xff0c; 去掉前面的#号。启动重写模块二、修改文件&#xff1a;应用目录下的httpd.conf文件内容如下&#xff1a;<VirtualHost 127.0.0.1>S…

openssl工具的使用以及创建私有CA

openssl软件包在安装之后&#xff0c;主要会生成三段重要内容&#xff1a;加密库ssl相关库文件openssl命令行工具下面就来介绍一下openssl命令行工具的使用&#xff1a;openssl和yum类似&#xff0c;有着许许多多的子命令&#xff1a;如果要获得这些子命令的相关man文档&#x…

Servlet体系结构

一、使用HttpServlet 其中&#xff0c;HttpServlet在重写的service()方法中对http请求的共7中提交方式进行了判断&#xff0c;所以只要我们只要重写对应的请求方式处理逻辑方法 doGet()和doPost()方法就可以&#xff1b; 浏览器直接访问servelet是get请求&#xff0c;参数列表会…

(转)剖析Delphi中的构造和析构

剖析Delphi中的构造和析构 1 Delphi中的对象模型: 2 1.1 对象名表示什么&#xff1f; 2 1.2 对象存储在哪里&#xff1f; 2 1.3 对象中存储了什么&#xff1f;它们是如何存储的? 3 2 构造函数与创建对象 5 2.1 什么是构造函数&#xff1f;(“特殊的”类方法) 5 2.2 对象的创建…

(NO.00001)iOS游戏SpeedBoy Lite成形记(八)

前一篇提到,如果要想动态修改选手的速度需要在update方法中添加代码. 因为update方法在游戏每一帧都会调用,所以我们不可能修改的太频繁.否则一来对性能有影响,而来玩家表现的极不自然,像抽风一样. 所以我决定,在一场比赛中每位选手的速度最多只能修改5次,先在GameScene中添加如…

【Linux】 命令收集

目录命令 转到home: cd ~ 转到目录的上层&#xff1a; cd ../ 转到目录的上上层&#xff1a; cd ../.. 返回进入当前目录前所在目录&#xff1a; cd - 复制文件&#xff08;将文件file复制到目录a下&#xff09;&#xff1a; cp file/ a 复制 软件安装 -删除 删除软件&#…

架构师之路(1)---面向过程和面向对象

1、引言 机算机科学是一门应用科学&#xff0c;它的知识体系是典型的倒三角结构&#xff0c;所用的基础知识并不多&#xff0c;只是随着应用领域和方向的不同&#xff0c;产生了很多的分支&#xff0c;所以说编程并不是一件很困难的事情&#xff0c;一个高中生经过特定的训练…

Servlet与缓存

Servlet类请求缓存&#xff1a;response.setDateHeader("Expires",System.currentTimeMills()1000*60*60) ;刷新缓存&#xff1a;请求头 If-Modified-Since服务器 lastModified请求头 和 服务器 进行比较 决定是否缓存转载于:https://www.cnblogs.com/Knuth/archive/…