浏览 12441 次
锁定老帖子 主题:JS操作COOKIE
精华帖 (0) :: 良好帖 (0) :: 新手帖 (18) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-11-17
//set cookie function setcookie(name,value){ var Days = 30; var exp = new Date(); exp.setTime(exp.getTime() + Days*24*60*60*1000); document.cookie = name + "="+ escape (value) + ";expires=" + exp.toGMTString(); } function getcookie(name){ var arr = document.cookie.match(new RegExp("(^| )"+name+"=([^;]*)(;|$)")); if(arr != null){ return unescape(arr[2]); }else{ return ""; } } function delcookie(name){ var exp = new Date(); exp.setTime(exp.getTime() - 1); var cval=getCookie(name); if(cval!=null) document.cookie= name + "="+cval+";expires="+exp.toGMTString(); } //delcookie("GD-cms"); if (document.cookie != "") { setcookie("GD-cms", "gae-django-cms"); } alert(getcookie("GD-cms")); 原文 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-11-18
价值不高。
第一,不○○,现在大家好像比较重视这个。 第二,功能也不全面,cookie的有效时间应该做为参数传入,而不是写死在函数里面。 理论上至少应该是这样: Cookie={ set:function(params){...} ,get:function(params){...} ,remove:function(params){...} } 但我不喜欢又是get又是set的,我喜欢合二为一,就像jquery那样,取值和设置值是同一个方法,只是参数不同。只传一个key就是取值,同时传了value就是设置。 所以要这样: Cookie={ item:function(params){...} } 用的时候可以这样: Cookie.item(key, value); //设置cookie Cookie.item({key:key, value:value, expires:expires, domain:domain}); //设置cookie var value = Cookie.item(key); //获取cookie Cookie.item(key, null); //清除cookie |
|
返回顶楼 | |
发表时间:2009-11-20
jQuery版的 jQuery.cookie = function(name, value, options) { if (typeof value != 'undefined') { // name and value given, set cookie options = options || {}; if (value === null) { value = ''; options.expires = -1; } var expires = ''; if (options.expires && (typeof options.expires == 'number' || options.expires.toUTCString)) { var date; if (typeof options.expires == 'number') { date = new Date(); date.setTime(date.getTime() + (options.expires * 24 * 60 * 60 * 1000)); } else { date = options.expires; } expires = '; expires=' + date.toUTCString(); // use expires attribute, max-age is not supported by IE } var path = options.path ? '; path=' + (options.path) : ''; var domain = options.domain ? '; domain=' + (options.domain) : ''; var secure = options.secure ? '; secure' : ''; document.cookie = [name, '=', encodeURIComponent(value), expires, path, domain, secure].join(''); } else { // only name given, get cookie var cookieValue = null; if (document.cookie && document.cookie != '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } }; 事实上这个版本可以不用jQuery来写的,因为代码里面只用了 jQuery.trim 这一个方法,完全可以写成独立的对象,用法形式上有jQuery方法的风格 |
|
返回顶楼 | |
发表时间:2009-11-24
楼上对jquery的参数机制很熟啊 ,研究过jQuery源码吧
|
|
返回顶楼 | |
发表时间:2009-11-24
我自己写的,为什么你这种帖子也能上首页,我自己写的框架就被评为新手帖??
cookie.js xu.pkg('xu.cookie'); (function() { var Cookie = function(){ this.get = function (name) { var arr = document.cookie.match(new RegExp("(^| )" + name + "=([^;]*)(;|$)")); if (arr != null) { return decodeURIComponent(arr[2]); } return null; }; this.set = function (sName,sValue,objHours,sPath,sDomain,bSecure){ var sCookie = sName + "=" + encodeURIComponent(sValue); if (objHours) { var date = new Date(); var ms = objHours * 3600 * 1000; date.setTime(date.getTime() + ms); sCookie += ";expires=" + date.toGMTString(); } if (sPath) { sCookie += ";path=" + sPath; } if (sDomain) { sCookie += ";domain=" + sDomain; } if (bSecure) { sCookie += ";secure"; } document.cookie=sCookie; }; this.clear = function (sName,sPath,sDomain,bSecure){ this.set(sName,'',0,sPath,sDomain,bSecure); } ; }; xu.apply(xu.cookie,new Cookie()); })(); /* xu.cookie 功能测试*/ //xu.cookie.set('ua',xu.browser.ua); //xu.cookie.set('chinese-char',"中文测试" + window.document.title); //trace_obj("xu.cookie.get('ua')",xu.cookie.get('ua')); //trace_obj("xu.cookie.get('chinese-char')",xu.cookie.get('chinese-char')); // //xu.cookie.clear('ua'); //xu.cookie.clear('chinese-char'); core.js如下: /* * 编码规范: 包名小写,类名大写,函数名小写,对象定义名称大写 * HTML标签小写,CSS名称小写,元素ID,name小写 * * 对js内置关键字做变量,在前面加上_标识符 */ /** * 开发笔记: * * -- IE6 hacker: * * 1. 元素ID不能以下划线开头 * 2. COL, COLGROUP, FRAMESET, HTML, STYLE, TABLE, TBODY, TFOOT, THEAD, TITLE, TR * 的很多属性只读,例如innerHTML,appendChild等等 * 3. p 不能包容div、h1除了<br />等块级元素。否则报错 * 4. a 不能包容div ;dt不能包容div,h */ var start_loaded_time = (new Date()).getTime(); // for old browsers window.undefined = window.undefined; // ------------------- 常用方法区域 //Camelcase 驼峰式风格 -- 第二个单词的首字母大写 String.prototype.getCamelcaseStyle = function(){ return this.replace(/-([a-z])/g, function(_0,_1){return _1.toUpperCase();}); }; /** * 创建元素 * @param {} tagName * @return {} */ function $C(tagName) { return document.createElement(tagName); } /** * 返回带有指定标签名的对象的集合,注意集合不是数组 * @param {} name * @return {} */ function $TagN(name) { return document.getElementsByTagName(name); } /** * 元素name属性名取 元素 * @param {} name * @return {} */ function $N(name) { return document.getElementsByName(name); } /** * 元素ID属性名取 元素 * @param {} name * @return {} */ function $ID(name) { return document.getElementById(name); } /** * 取指定节点下 具有CSS类名的元素数组 * 摘自: js捷径教程 * * @param {} node * @param {} classname * @return {} */ function $clsN(node,classname) { var a = [] ; var re = new RegExp('(^| )' + classname + '( |$)'); var els = node.getElementsByTagName('*'); for(var i = 0 , j = els.length;i<j;i++){ //排除 空白节点 if (els[i] && (els[i].nodeType ==1 )&& (re.test(els[i].className) ) ) a.push(els[i]); } return a ; } var __proto = "prototype"; var __class = "__class__"; var __pkg = "__pkg__"; var __superclass = "__superclass__"; //顶级命名空间 -- xu if (typeof xu == 'undefined') { xu = { version : '0.1' , is_debug: true && 1 // 开启调试功能的变量 }; } /** * 将config对象中的属性全部复制给obj对象 * 摘自: ext3.0 * * @param {} obj * @param {} config * @param {} defaults * @return {} */ xu.apply = function(obj, config, defaults){ if(defaults){ xu.apply(obj, defaults); } if(obj && config && typeof config == 'object'){ for(var p in config){ obj[p] = config[p]; } } return obj; }; xu.apply(xu,{ /** * 系统变量申明區域 * @type {} */ G_Var: { 'PKGS': [] , 'APP_INF': {} , 'OBJECTS': {} , 'CLASS_PATH': {} } , /** * 定义包 * @param {} ns * @return {} */ pkg: function(ns) { if (!ns || !ns.length) { return null; } var levels = ns.split("."); var nsobj = xu; for (var i = (levels[0] == "xu") ? 1 : 0; i < levels.length; ++i) { nsobj[levels[i]] = nsobj[levels[i]] || {}; nsobj = nsobj[levels[i]]; } xu['G_Var']['PKGS'].push(ns); return nsobj; } , dump_pkg_list: function(){alert('依赖debug.js')} , uid: function(){alert('依赖crypto.js')} , /** * 仅当obj对象不存在config对象中的属性时才将此属性复制给obj对象 * @param {} obj * @param {} config * @return {} */ applyIf : function(obj, config){ if(obj){ for(var p in config){ if(xu.verify._null(obj[p])){ obj[p] = config[p]; } } } return obj; } , getAppInf: function(option){ if (option && !xu.verify._null(option) && xu['G_Var']['APP_INF'].hasOwnProperty(option)){ return xu['G_Var']['APP_INF'][option]; } return null ; } , setAppInf: function(option,value){ if (option && !xu.verify._null(option)) xu['G_Var']['APP_INF'][option] = value ; } , map: function(obj,func){ if(obj){ obj = func(obj); } return obj; } }); //xu.verify -- 变量类型验证 xu.pkg('xu.verify'); xu.apply(xu.verify,{ _undef: function (v){return typeof v == "undefined";} , _null: function (v){return v === null;} , _arr: function (v){ // return xu.verify._obj(v) && v.constructor == Array; return Object[__proto].toString.call(v) === '[object Array]'; } , _str: function (v){return typeof v == "string";} , _bool: function (v){return typeof v == "boolean";} , _num: function (v){return typeof v == "number";} , _int: function (v){return /^[01233456789]{1,}$/.test(v);} , _func: function (v){return v && typeof v == "function";} , _obj: function (v){return v && typeof v == "object";} }); xu.pkg('xu._class') ; (function() { xu.setAppInf('SYS_CLASS_NS','xu._class.sys'); xu.setAppInf('USER_CLASS_NS','xu._class.user'); xu.apply(xu._class,{ create: function(pkg_n,class_n,p_class,class_impl,isOverride){ if (xu.verify._null(class_n) || class_n === ""){ return null ;} try { var $t_class = eval(pkg_n + "." +class_n); if (this.exist($t_class)) { trace( "isExist: " + class_n + " Override:" + isOverride ); if (!isOverride){ return null ;} } } catch(e){ //如果出异常,说明该类没有定义 } if (xu.verify._null(pkg_n) || pkg_n === ""){ pkg_n = xu.getAppInf('USER_CLASS_NS') ; } $this_pkg = xu.pkg(pkg_n); //定义父类,将子类的原型 指向父类 if (xu.verify._null(p_class) || p_class === ""){ p_class = xu._class.sys.XClass ;//这个类在匿名函数中创建 } //定义类 $t_class = $this_pkg[class_n] = function(){}; $t_class['__instance_count__'] = 0 ; // 将子类的原型 指向父类,以此获取属性继承 $t_class[__proto] = new p_class(); var __superclass__ = ($t_class[__proto]['__str__']) ? $t_class[__proto]['__str__'](true): 'Object' ; xu.apply($t_class[__proto],{ '__pkg__': pkg_n , '__superclass__': __superclass__, '__class__': class_n }); if (!$t_class[__proto]['__str__']){ $t_class[__proto]['__str__'] = function(isShort){ if (!isShort) return "[class: " + this.__pkg__ + "." + this.__class__ + "]" ; return this.__pkg__ + "." + this.__class__ ; } } if (xu.verify._obj(class_impl)){ xu.apply($t_class[__proto],class_impl); } return $t_class ; } , /** * 验证类是否存在 * @param {String} Class * @return {Boolean} */ exist: function(Class){ if (xu.verify._func(Class)) return true ; return false ; } }); //定义基类, 用于框架中所创建的类的基类. xu._class.create(xu.getAppInf('SYS_CLASS_NS'),'XClass',Object,{ 'desc': 'A System Base Class !' }); Class = xu._class ; })(); //定义时间对象 xu.pkg('xu.date'); xu.apply(xu.date,{ start_loaded_time: start_loaded_time , stop_loaded_time: -1 , loaded_time: function(){ this.stop_loaded_time = this.getTime(); return this.stop_loaded_time - this.start_loaded_time ; } , getTime: function(){return (new Date()).getTime();} }); ui.js /** * UI Widget 包 */ xu.pkg('xu.ui'); xu._class.create('xu.ui','Widget',null,{ desc: 'Widget Base Class' ,options: {}, instance: null ,error: false , newInstance: function(Class){} , config: function(options){ xu.apply(this.options,options); } , getWidget: function(){alert(this.__str__() + " getWidget() not implement");} , __err__: function(){ return this.__str__() + this.error; }, destroy: function(){alert("销毁");} }); //定义实例列表,用于缓存Widget对象 xu.ui.Widget.instances = {} ; /** * 快速构建Widget 对象的方法 * * @param String ref_n * @param {} options * @return xu.ui.Widget */ xu.ui.Widget.get = function(ref_n,options){ if (xu.ui.Widget.instances.hasOwnProperty(ref_n)) return xu.ui.Widget.instances[ref_n].getWidget(); if (typeof options == 'undefined' || !xu.verify._obj(options)){ var o_info = "'widget标识符',options: { type: Widget Class ,config: {类初始化参数} }" ; warn_msg('<br/>$widget('+ref_n+')初始化错误<br/>设置语法: ' + o_info);return null ; } var options = options || {} ; if (options['type'] && xu._class.exist(options['type']) && options['type'].prototype['getWidget']){ var widget = new options['type'](); widget.config(options['config']); var instance = widget.getWidget() ; if (instance){ xu.ui.Widget.instances[ref_n] = widget ; return instance ; } warn_msg(widget.__err__()); return null ; } }; $widget = xu.ui.Widget.get ; $widget.destroy = function(ref_n){ if (xu.ui.Widget.instances.hasOwnProperty(ref_n)){ var w = xu.ui.Widget.instances[ref_n]; if (w.destroy) w.destroy(); delete xu.ui.Widget.instances[ref_n]; } }; ui.widget.js // widget 调用步骤: new , config , getWidget /** * xu.ui.UCrenWidget -- Ucren Widget的封装器基类 */ xu._class.create('xu.ui','UCrenWidget',xu.ui.Widget,{ desc: 'Ucren Widget' ,xtype: null ,error: '依赖Ucren组件' , newInstance: function(){ try{ var $t = eval(this.xtype); this.instance = new $t(this.options); } catch(e){} finally { return this.instance ; } } }); /** * xu.ui.UCrenWindow */ xu._class.create('xu.ui','UCrenWindow',xu.ui.UCrenWidget,{ error: '依赖Ucren.FlashWindow' , xtype: 'Ucren.FlashWindow' , options: { left: 170,top: 70,width: 400,height: 300,minWidth: 200,minHeight: 100, caption: '窗体', resizeAble: true ,cloButton: true,cloAble: true } , getWidget: function(){ if (this.instance) return this.instance ; return this.newInstance(); } }); /** * xu.ui.HTMLWidget HTML 构件基类 */ xu._class.create('xu.ui','HTMLWidget',xu.ui.Widget,{ desc: 'HTML Widget Base Class', newInstance: function(){} , config: function(options){ xu.apply(this.options,options); } , render: function(){alert(this.__str__() + " render() not implement");} }); /** * xu.ui.HTMLTable */ xu._class.create('xu.ui','HTMLTable',xu.ui.HTMLWidget,{ desc: 'HTML Table' ,table:null,caption: null,thead: null ,tbody: null ,tfoot:null, options: { caption: null , columns: [] ,datas:{fields:[] ,records:[]} ,foots:[] , css: { color: 'red' } } , destroy: function(){ if (!this.instance) return null ; with(this){ instance.empty().remove(); caption=null;tfoot=null;options = null ;thead=null;tbody=null;table=null; } }, getWidget: function(){ if (this.instance) return this ; this.instance = $eo.create('table'); this.table = this.instance.ele; this.caption = this.table.createCaption(); this.thead = this.table.createTHead(); this.tbody = this.table.getElementsByTagName("tbody")[0] || this.table.appendChild($C("tbody")); this.tfoot = this.table.createTFoot(); return this ; } , render: function(ele){ this.setCaption(this.options.caption); this.setTHead(this.options.columns); this.setTBody(this.options.datas); this.setTBody(this.options.foots); this.instance.css(this.options.css); this.instance.appendTo($eo(ele).ele); return this.instance.html() ; } , setCaption: function(v){ if (v){ this.caption.innerHTML = v ; this.options.caption = v ; } } , setTHead: function(columns){ if (xu.verify._arr(columns)){ var _tr = this.thead.insertRow(0);var _this = this ; xu.array.each(columns,function(item,index){ var _td = _tr.insertCell(index); _td.innerHTML = item.name ; if (item.width) xu.dom.css(_td,{width: item.width}); if (item.dataIndex) xu.dom.attr(_td,{dataIndex: item.dataIndex}); }); } } , setTBody: function(datas){ if (xu.verify._obj(datas) && datas.fields && datas.records){ var _this = this ; xu.array.each(datas.records,function(record,index){ var _tr = _this.tbody.insertRow(index); xu.array.each(record,function(item,index){ var _td = _tr.insertCell(index); _td.innerHTML = item ; }); }); } } , setTFoot: function(foots){ } }); |
|
返回顶楼 | |
发表时间:2009-11-26
cuixiping 写道 价值不高。
第一,不○○,现在大家好像比较重视这个。 第二,功能也不全面,cookie的有效时间应该做为参数传入,而不是写死在函数里面。 理论上至少应该是这样: Cookie={ set:function(params){...} ,get:function(params){...} ,remove:function(params){...} } 但我不喜欢又是get又是set的,我喜欢合二为一,就像jquery那样,取值和设置值是同一个方法,只是参数不同。只传一个key就是取值,同时传了value就是设置。 所以要这样: Cookie={ item:function(params){...} } 用的时候可以这样: Cookie.item(key, value); //设置cookie Cookie.item({key:key, value:value, expires:expires, domain:domain}); //设置cookie var value = Cookie.item(key); //获取cookie Cookie.item(key, null); //清除cookie params 传个对象来好点. |
|
返回顶楼 | |