使用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 相关文章推荐
Jquery 组合form元素为json格式,asp.net反序列化
Jul 09 Javascript
js实现图片轮换效果代码
Apr 16 Javascript
jquery ajax对特殊字符进行转义防止js注入使用示例
Nov 21 Javascript
使用js实现一个可编辑的select下拉列表
Feb 20 Javascript
详解vue.js的devtools安装
May 26 Javascript
jQuery实现的简单无刷新评论功能示例
Nov 08 jQuery
详解如何解决Vue和vue-template-compiler版本之间的问题
Sep 17 Javascript
函数式编程入门实践(一)
Apr 20 Javascript
详解VUE Element-UI多级菜单动态渲染的组件
Apr 25 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
Vue中多元素过渡特效的解决方案
Feb 05 Javascript
JavaScript 获取滚动条位置并将页面滑动到锚点
Feb 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
深入探讨:Nginx 502 Bad Gateway错误的解决方法
2013/06/03 PHP
分享下php5类中三种数据类型的区别
2015/01/26 PHP
php使用curl出现Expect:100-continue解决方法
2015/03/03 PHP
php版微信自动获取收货地址api用法示例
2016/09/22 PHP
网站被黑的假象--ARP欺骗之页面中加入一段js
2007/05/16 Javascript
NodeJS 模块开发及发布详解分享
2012/03/07 NodeJs
THREE.JS入门教程(2)着色器-上
2013/01/24 Javascript
div模拟选择框示例代码
2013/11/03 Javascript
Bootstrap3制作图片轮播效果
2016/05/12 Javascript
Bootstrap整体框架之CSS12栅格系统
2016/12/15 Javascript
微信小程序教程系列之设置标题栏和导航栏(7)
2020/06/29 Javascript
详解vue前后台数据交互vue-resource文档
2017/07/19 Javascript
react native与webview通信的示例代码
2017/09/25 Javascript
详解Javascript 中的 class、构造函数、工厂函数
2017/12/20 Javascript
Vue 将后台传过来的带html字段的字符串转换为 HTML
2018/03/29 Javascript
[05:35]DOTA2英雄梦之声_第13期_拉比克
2014/06/21 DOTA
python 判断自定义对象类型
2009/03/21 Python
python 从远程服务器下载东西的代码
2013/02/10 Python
Windows下Anaconda的安装和简单使用方法
2018/01/04 Python
Python算法的时间复杂度和空间复杂度(实例解析)
2019/11/19 Python
详解使用HTML5 Canvas创建动态粒子网格动画
2016/12/14 HTML / CSS
意大利灯具购物网站:Lampade.it
2018/10/18 全球购物
Foot Locker加拿大官网:美国知名运动产品零售商
2019/07/21 全球购物
电子商务专业个人的自我评价分享
2013/10/29 职场文书
cf收人广告词
2014/03/14 职场文书
团支书竞选演讲稿
2014/04/28 职场文书
大三学生学年自我鉴定
2014/09/12 职场文书
2015年党性分析材料
2014/12/19 职场文书
学雷锋献爱心活动总结
2015/05/11 职场文书
班级班风口号大全
2015/12/25 职场文书
2016年优秀党务工作者先进事迹材料
2016/02/29 职场文书
如何用JS实现网页瀑布流布局
2021/04/24 Javascript
Python基础详解之描述符
2021/04/28 Python
python tqdm用法及实例详解
2021/06/16 Python
Python 数据可视化之Bokeh详解
2021/11/02 Python
Redis实现一个账号只能登录一个设备
2022/04/19 Redis