使用js操作cookie的一点小收获分享


Posted in Javascript onSeptember 03, 2013

为了说清楚这个问题,必须从头说起。

首先从后台配置一个参数,放到一个字段里,该字段叫做keywords,这个参数的值叫做efmis://|efmfj|username|2200|0||2014|http://10.20.1.54:7001/cssServerportal222012/|||||02,姑且不去管这个值有什么含义,相信很多人都遇到过比这个更复杂的字符串。后台配置以后,前台可以这么来显示:${tag_bean.keywords},可以肯定,无论后台配置成什么,前台一定会原定不变的显示出来,第一个问题出现:在username这个位置上,嵌入的是当前登录用户的用户名,必须是动态代码。难道要写成efmis://|efmfj|${username}|2200|0||2014|http://10.20.1.54:7001/cssServerportal222012?这样写跟期望可有所不同,它会原样不变的显示出来,并不会把EL表达式翻译成动态代码,暂时不考虑能不能使用EL表达式的嵌套,很显然不能直接使用,一定要要处理这么一个字符串。

这个字符串是要作为一个js方法的参数的,例如:

<li [#if c.keywords?exists] keywords="${c.keywords}" 
[/#if] path="${c.path}" onclick="clickClient(this.path,this.keywords);"> 
<a href="javascript:void(0)" style="cursor: pointer;"><span>${c.name}</span> 
</a> 
</li>

clickClient这个方法不是真正要调用的方法,只是一个过渡方法而已。
clickClient = function(path,keywords){ 
//解析分解keywords开始 
keywords = keywords.replace("username","${user.username}"); 
var suffIndex=keywords.indexOf("http"); 
var prefix = keywords.substr(0,suffIndex-1); 
var suffix = keywords.substr(suffIndex-1); 
var preIndex=prefix.lastIndexOf("|")+1; 
var year = prefix.substr(preIndex); 
prefix = prefix.substr(0,preIndex); 
//解析分解keywords结束 
//合并url 
keywords = prefix+$("#year").val()+suffix; 
clientInvoke(path,keywords); 
}

在这个方法,最终实现的目的是调用clientInvoke方法,而传进去的参数keywords是变化,要经过一定的处理,首先把${user.username}把user替换掉,在js代码中,即使含有EL表达式也会动态的解析出来,这点就实现了动态的调用当前用户名的目标。当2014这个年度也要设置为动态的,并且是可以切换的,那就要把该字符串分解成三个部分:

前缀:efmis://|efmfj|username|2200|0||

年度:2014

后缀:|http://10.20.1.54:7001/cssServerportal222012/|||||02

把年度放在一个select下拉菜单中,当触动clickClient方法时,即时的从当前option中取出年度,然后和前缀后缀拼接起来,这样就是实现了年度可变化的灵活性。

年度切换 
<select id="year" onclick="switchYear(this.value);"> 
<option value="2012">2012</option> 
<option value="2013">2013</option> 
<option value="2014" selected="selected">2014</option> 
<option value="2015">2015</option> 
</select>

这时候会有一个问题,当年度切换之后,比如默认的2014,切换到2013之后,如果刷新页面,就会重新变回默认的2014,这个该怎么办呢?刷新之后所有的变量都重新加载了,所以设置全局变量这个方法就行不通了,那么我们要问,什么东西是不随着页面刷新而变化并且我们很容易进行操作的?看到本文的标题我想所有人都会知道了:cookie!

cookie是保存在本地的资源,可以随存随取,在记住密码的功能上起了极大的作用。这时候我们就利用cookie,把年度存在cookie中。每次加载页面时,判断cookie是否存在,如果存在就从中取出放入select,如果不存在就从select中取出,存入cookie。

$(document).ready(function(){ 
if(getCookie("Year")==null){//不存在该cookie,放进去 
setCookie("Year",$("#year").val()); 
}else{ 
//已经存在该cookie,则从中取出 
$("#year").val(getCookie("Year")); 
} 
}); 
//设置cookie 
function setCookie(name,value) 
{ 
//var Days = 30; 
//var exp = new Date(); 
//exp.setTime(exp.getTime() + 365*24*60*60*1000); 
document.cookie = name + "="+ escape (value); 
// + ";expires=" + exp.toGMTString(); 
} 
//读取cookies 
function getCookie(name) 
{ 
var arr,reg=new RegExp("(^| )"+name+"=([^;]*)(;|$)"); 
if(arr=document.cookie.match(reg)) return unescape(arr[2]); 
else return null; 
}

在切换年度的时候,cookie的值当然也要发生变化:
switchYear=function(year){ 
setCookie("Year",year); 
}

根据用户的要求,一定要让2014作为默认。每次切换完cookie操作完成之后,关闭浏览器,重新打开登录进入首页,年度依然要是2014,而不是上次切换的那个值。所以我们就不需要设定cookie的过期时间了,只需要让其在浏览器关闭后自动清除即可。

当然了,如果期望浏览器长期记住cookie,就设定过期时间,setCookie中的注释代码正是设置过期时间用的。感兴趣的可以研究下。

Javascript 相关文章推荐
修改js Calendar日历控件 兼容IE9/谷歌/火狐
Jan 04 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
Jul 10 Javascript
使用javascript实现json数据以csv格式下载
Jan 09 Javascript
js网页滚动条滚动事件实例分析
May 05 Javascript
jQuery ztree实现动态树形多选菜单
Aug 12 Javascript
jQuery插件扩展实例【添加回调函数】
Nov 26 Javascript
jQuery查找和过滤_动力节点节点Java学院整理
Jul 04 jQuery
解决ztree搜索中多级菜单展示不全问题
Jul 05 Javascript
js分页之前端代码实现和请求处理
Aug 04 Javascript
Javacript中自定义的map.js  的方法
Nov 26 Javascript
JS前后端实现身份证号验证代码解析
Jul 23 Javascript
微信小程序淘宝首页双排图片布局排版代码(推荐)
Oct 29 Javascript
jquery 实现窗口的最大化不论什么情况
Sep 03 #Javascript
jQuery动态添加删除select项(实现代码)
Sep 03 #Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 #Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
Sep 02 #Javascript
可兼容IE的获取及设置cookie的jquery.cookie函数方法
Sep 02 #Javascript
基于MVC3方式实现下拉列表联动(JQuery)
Sep 02 #Javascript
javascript模块化是什么及其优缺点介绍
Sep 02 #Javascript
You might like
10条PHP编程习惯助你找工作
2008/09/29 PHP
PHP脚本监控Nginx 502错误并自动重启php-fpm
2015/05/13 PHP
PHP5.6新增加的可变函数参数用法分析
2017/08/25 PHP
Javascript实例教程(19) 使用HoTMetal(3)
2006/12/23 Javascript
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
JS跨域总结
2012/08/30 Javascript
javascript parseInt() 函数的进制转换注意细节
2013/01/08 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
2014/04/10 Javascript
js实现YouKu的漂亮搜索框效果
2015/08/19 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
对jquery的ajax进行二次封装以及ajax缓存代理组件:AjaxCache详解
2016/04/11 Javascript
javascript+HTML5 Canvas绘制转盘抽奖
2020/05/16 Javascript
Angularjs实现mvvm式的选项卡示例代码
2016/09/08 Javascript
详谈Ajax请求中的async:false/true的作用(ajax 在外部调用问题)
2017/02/10 Javascript
使用Bootstrap + Vue.js实现表格的动态展示、新增和删除功能
2017/11/27 Javascript
Vue.js自定义指令学习使用详解
2019/10/19 Javascript
js验证账户名是否重复
2020/05/26 Javascript
详解vue 组件的实现原理
2020/11/12 Javascript
机器学习10大经典算法详解
2017/12/07 Python
PyQt5每天必学之切换按钮
2020/08/20 Python
python 执行shell命令并将结果保存的实例
2018/05/11 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python多进程写入同一文件的方法
2019/01/14 Python
基于python的socket实现单机五子棋到双人对战
2020/03/24 Python
python tkinter控件布局项目实例
2019/11/04 Python
重写django的model下的objects模型管理器方式
2020/05/15 Python
CSS3 background-image颜色渐变的实现代码
2018/09/13 HTML / CSS
德国电子商城:ComputerUniverse
2017/04/21 全球购物
总经理驾驶员岗位职责
2013/12/04 职场文书
初一体育教学反思
2014/01/29 职场文书
会计工作决心书
2014/03/11 职场文书
颁奖晚会主持词
2014/03/25 职场文书
村级四风对照检查材料
2014/08/24 职场文书
先进事迹材料怎么写
2014/12/30 职场文书
2015年领导干部廉洁自律工作总结
2015/05/26 职场文书
vue+spring boot实现校验码功能
2021/05/27 Vue.js