使用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类库需要的核心代码
Jul 16 Javascript
你必须知道的JavaScript 中字符串连接的性能的一些问题
May 07 Javascript
jQuery实现鼠标点击弹出渐变层的方法
Jul 09 Javascript
纯JS实现本地图片预览的方法
Jul 31 Javascript
JS简单实现城市二级联动选择插件的方法
Aug 19 Javascript
javascript实现简单的on事件绑定
Aug 23 Javascript
Bootstrap Img 图片样式(推荐)
Dec 13 Javascript
详解微信小程序开发—你期待的分享功能来了,微信小程序序新增5大功能
Dec 23 Javascript
微信小程序 MD5加密登录密码详解及实例代码
Jan 12 Javascript
微信小程序开发中var that =this的用法详解
Jan 18 Javascript
Vue结合路由配置递归实现菜单栏功能
Jun 16 Javascript
JS实现购物车基本功能
Nov 08 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
PHP 的 __FILE__ 常量
2007/01/15 PHP
一步一步学习PHP(7) php 字符串相关应用
2010/03/05 PHP
Packer 3.0 JS压缩及混淆工具 下载
2007/05/03 Javascript
JavaScript对象链式操作代码(jquery)
2010/07/04 Javascript
理解javascript中的MVC模式
2016/01/28 Javascript
Javascript随机标签云代码实例
2016/06/21 Javascript
ion content 滚动到底部会遮住一部分视图的快速解决方法
2016/09/06 Javascript
通过构造函数实例化对象的方法
2017/06/28 Javascript
浅谈ajax在jquery中的请求和servlet中的响应
2018/01/22 jQuery
利用js给datalist或select动态添加option选项的方法
2018/01/25 Javascript
vue动态绑定class选中当前列表变色的方法示例
2018/12/19 Javascript
详解如何更好的使用module vuex
2019/03/27 Javascript
Vue自定义全局Toast和Loading的实例详解
2019/04/18 Javascript
微信小程序实现圆形进度条动画
2020/11/18 Javascript
JS实现的tab切换并显示相应内容模块功能示例
2019/08/03 Javascript
vscode+gulp轻松开发小程序的完整步骤
2020/10/18 Javascript
[05:24]TI9采访——教练
2019/08/24 DOTA
[49:21]完美世界DOTA2联赛循环赛 Ink Ice vs LBZS BO2第二场 11.05
2020/11/06 DOTA
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
使用 Python 实现微信公众号粉丝迁移流程
2018/01/03 Python
python实现定时压缩指定文件夹发送邮件
2020/12/22 Python
Python3实现将一维数组按标准长度分隔为二维数组
2019/11/29 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
Xadmin+rules实现多选行权限方式(级联效果)
2020/04/07 Python
Python操作dict时避免出现KeyError的几种解决方法
2020/09/20 Python
对Pytorch 中的contiguous理解说明
2021/03/03 Python
斯洛伐克时尚服装网上商店:Cellbes
2016/10/20 全球购物
香蕉共和国加拿大官网:Banana Republic加拿大
2018/08/06 全球购物
欧姆龙医疗保健与医疗产品:Omron Healthcare
2020/02/10 全球购物
教师自我鉴定
2013/12/13 职场文书
2014自主招生自荐信策略
2014/01/27 职场文书
个人安全生产责任书
2014/07/28 职场文书
社区党员公开承诺书
2014/08/30 职场文书
班子查摆四风个人对照检查材料思想汇报
2014/10/04 职场文书
同学聚会祝酒词
2015/08/10 职场文书
只需要12页,掌握撰写一流商业计划书的技巧
2019/05/07 职场文书