- // jquery 封装 localStorage, sessionStorage, cookie
- var script = document.createElement("script");
- script.setAttribute("type", "text/javascript");
- script.setAttribute("src", "//code.jquery.com/jquery-1.8.3.min.js");
- var heads = document.getElementsByTagName("head");
- if (heads.length) {
-   heads[0].appendChild(script);
- } else {
-   document.documentElement.appendChild(script);
- }
- script.onload = function () {
-   (function () {
-     $.extend({
-       isJson: function (str) {
-         if ($.type(str) == "string") {
-           try {
-             var obj = JSON.parse(str);
-             if ($.type(obj) == "object" && obj) {
-               return true;
-             } else {
-               return false;
-             }
-           } catch (e) {
-             //console.log('error:'+str+'!!!'+e);
-             return false;
-           }
-         }
-         return false;
-       },
-       storage: function (name, value, expire) {
-         // expire 参数 格式 {expire : 1} 注:expire.expire 的值 等于过期时间减去当前时间, 一个大于0的值,单位毫秒。
-         //判断全局是否过期
-         var expires = JSON.parse(localStorage.getItem("expire")) || {
-           expire: 0,
-         };
-         if (expires.expire && expires.expire < new Date().getTime())
-           this.removeStorage();
-         //没有参数时,返回原生 localStorage
-         if (arguments.length == 0) return localStorage;
-         if (arguments[0] == null || arguments[0] == "") return;
-         if (name && name in expires && expires[name] && expires[name] < new Date().getTime()) {
-           this.removeStorage(name);
-           delete expires[name];
-           localStorage.setItem("expire", JSON.stringify(expires));
-         }
-         if (arguments.length == 1) {
-           if ($.type(arguments[0]) == "string") {
-             //只有一个字符串参数 'expire' 时 返回全局的过期时间
-             if (arguments[0] == "expire" || arguments[0] == ":") return expires.expire;
-             //只有一个字符串参数 'expires' 时 返回json数据 所有的过期时间  包含全局
-             if (arguments[0] == "expires" || arguments[0] == "::") return expires;
-             //只有一个字符串参数 以冒号或双冒号开头的字符串 冒号后面是要查找到 [name] 返回[name]的过期时间
-             if (/^:{1,2}[\w-]+$/.test(arguments[0])) {
-               name = arguments[0].replace(/^:{1,2}([\w-]+)$/);
-               if (name in expires && expires.name) return expires[name];
-               return 0;
-             }
-             //只有一个字符串参数时,返回当前的值
-             var ret = localStorage.getItem(name);
-             if (this.isJson(ret)) ret = JSON.parse(ret);
-             return ret;
-           }
-           //只有一个 json对象参数并且它包含expire属性
-           if ($.type(arguments[0]) == "object" && "expire" in arguments[0] && arguments[0].expire) {
-             //值为字符串时 字符串是要查找到 [name] 返回[name]的过期时间
-             if ($.type(arguments[0].expire) == "string") {
-               name = arguments[0].expire;
-               if (name in expires && expires.name) return expires[name];
-               return 0;
-             }
-             //值为数字时 设置全局过期时间
-             if ($.type(arguments[0].expire) == "number") {
-               expires.expire = new Date().getTime() + arguments[0].expire;
-               localStorage.setItem("expire", JSON.stringify(expires));
-             }
-           }
-         }
-         //有2个参数 第1个是字符串,第2个是 expire对象时
-         if (
-           arguments.length == 2 &&
-           $.type(arguments[0]) == "string" &&
-           arguments[0] != "" &&
-           $.type(arguments[1]) == "object" &&
-           Object.keys(arguments[1]).length == 1 &&
-           "expire" in arguments[1]
-         )
-           expire = arguments[1].expire;
-         //保存当前 expire
-         if (expire && $.type(expire) == "object") {
-           expires[name] = new Date().getTime() + expire.expire;
-           localStorage.setItem("expire", JSON.stringify(expires));
-         }
-         if (value == null || value == "") return this;
-         if ($.type(value) == "object" || $.type(value) == "array")
-           value = JSON.stringify(arguments[1]);
-         localStorage.setItem(name, value);
-         return this;
-       },
-       removeStorage: function (name) {
-         if (name == null) localStorage.clear();
-         else localStorage.removeItem(name);
-         return this;
-       },
-       session: function (name, value) {
-         if (name == null) return sessionStorage; //没有参数时,返回原生 sessionStorage
-         if (value == null) {
-           var ret = sessionStorage.getItem(name);
-           if (this.isJson(ret)) ret = JSON.parse(ret);
-           return ret;
-         }
-         if ($.type(value) == "object" || $.type(value) == "array")
-           value = JSON.stringify(value);
-         sessionStorage.setItem(name, value);
-         return this;
-       },
-       removeSession: function (name) {
-         if (name == null) sessionStorage.clear();
-         else sessionStorage.removeItem(name);
-         return this;
-       },
-       cookie: function (name, value, options) {
-         var cookie = document.cookie.replace(" ", "");
-         //当没有参数时 返回原生 cookie 对象
-         if (arguments.length == 0) return unescape(cookie);
-         if (name == null || $.type(name) != "string" || name == "") return;
-         //当只有一个参数时 返回 value 值, 当第二参数为布尔型时 true : 返回 json 所有数据。 false : 与一个参数时相同。
-         if (arguments.length == 1 || (arguments.length == 2 && $.type(arguments[1]) == "boolean")) {
-           var json = {};
-           $.each(cookie.split(";"), function (i, str) {
-             var arr = str.split("=");
-             json[arr[0]] = unescape(arr[1]);
-           });
-           if (arguments.length == 2 && arguments[1]) return json;
-           //读取 name 值
-           var ret = unescape(json[name]);
-           //如果是JSON字符串,转成JSON对象
-           if (this.isJson(ret)) ret = JSON.parse(ret);
-           return ret;
-         }
-         //以下是写入cookie
-         var str = ";";
-         // json { domain : '', path : '', expires : 0, secure : '' } expire 或  expires 都可以  单位豪秒
-         // expire 或  expires  参数 格式 {expire : 1}   注:expire.expire 的值 等于过期时间减去当前时间, 一个大于0的值,单位毫秒。
-         if (options || $.type(options) == "object") {
-           //把 expire 属性 修正为 expires
-           if ("expire" in options && options.expire && $.type(options.expire) == "number") {
-             options.expires = options.expire;
-             delete options.expire;
-           }
-           //处理过期时间,单位毫秒
-           if ("expires" in options && options.expires && $.type(options.expires) == "number") {
-             var exp = new Date();
-             exp.setTime(exp.getTime() + options.expires);
-             options.expires = exp.toGMTString();
-           }
-           for (var key in options) {
-             str += key + "=" + options[key] + ";";
-           }
-         }
-         document.cookie = name + "=" + escape(value) + str;
-         return this;
-       },
-       removeCookie: function (name, options) {
-         return this.cookie(name, "", $.extend(options, { expires: -1, }));
-       },
-     });
-   })(jQuery);
-   $.storage("a", "localStorage");
-   console.log($.storage("a"));
-   $.removeStorage("a");
-   console.log($.storage("a"));
-   $.session("b", "sessionStorage");
-   console.log($.session("b"));
-   $.removeSession("b");
-   console.log($.session("b"));
-   $.cookie("c", "cookie");
-   console.log($.cookie("c"));
-   $.removeCookie("c");
-   console.log($.cookie("c"));
- };