1. // jquery 封装 localStorage, sessionStorage, cookie
    2. var script = document.createElement("script");
    3. script.setAttribute("type", "text/javascript");
    4. script.setAttribute("src", "//code.jquery.com/jquery-1.8.3.min.js");
    5. var heads = document.getElementsByTagName("head");
    6. if (heads.length) {
    7. heads[0].appendChild(script);
    8. } else {
    9. document.documentElement.appendChild(script);
    10. }
    11. script.onload = function () {
    12. (function () {
    13. $.extend({
    14. isJson: function (str) {
    15. if ($.type(str) == "string") {
    16. try {
    17. var obj = JSON.parse(str);
    18. if ($.type(obj) == "object" && obj) {
    19. return true;
    20. } else {
    21. return false;
    22. }
    23. } catch (e) {
    24. //console.log('error:'+str+'!!!'+e);
    25. return false;
    26. }
    27. }
    28. return false;
    29. },
    30. storage: function (name, value, expire) {
    31. // expire 参数 格式 {expire : 1} 注:expire.expire 的值 等于过期时间减去当前时间, 一个大于0的值,单位毫秒。
    32. //判断全局是否过期
    33. var expires = JSON.parse(localStorage.getItem("expire")) || {
    34. expire: 0,
    35. };
    36. if (expires.expire && expires.expire < new Date().getTime())
    37. this.removeStorage();
    38. //没有参数时,返回原生 localStorage
    39. if (arguments.length == 0) return localStorage;
    40. if (arguments[0] == null || arguments[0] == "") return;
    41. if (name && name in expires && expires[name] && expires[name] < new Date().getTime()) {
    42. this.removeStorage(name);
    43. delete expires[name];
    44. localStorage.setItem("expire", JSON.stringify(expires));
    45. }
    46. if (arguments.length == 1) {
    47. if ($.type(arguments[0]) == "string") {
    48. //只有一个字符串参数 'expire' 时 返回全局的过期时间
    49. if (arguments[0] == "expire" || arguments[0] == ":") return expires.expire;
    50. //只有一个字符串参数 'expires' 时 返回json数据 所有的过期时间 包含全局
    51. if (arguments[0] == "expires" || arguments[0] == "::") return expires;
    52. //只有一个字符串参数 以冒号或双冒号开头的字符串 冒号后面是要查找到 [name] 返回[name]的过期时间
    53. if (/^:{1,2}[\w-]+$/.test(arguments[0])) {
    54. name = arguments[0].replace(/^:{1,2}([\w-]+)$/);
    55. if (name in expires && expires.name) return expires[name];
    56. return 0;
    57. }
    58. //只有一个字符串参数时,返回当前的值
    59. var ret = localStorage.getItem(name);
    60. if (this.isJson(ret)) ret = JSON.parse(ret);
    61. return ret;
    62. }
    63. //只有一个 json对象参数并且它包含expire属性
    64. if ($.type(arguments[0]) == "object" && "expire" in arguments[0] && arguments[0].expire) {
    65. //值为字符串时 字符串是要查找到 [name] 返回[name]的过期时间
    66. if ($.type(arguments[0].expire) == "string") {
    67. name = arguments[0].expire;
    68. if (name in expires && expires.name) return expires[name];
    69. return 0;
    70. }
    71. //值为数字时 设置全局过期时间
    72. if ($.type(arguments[0].expire) == "number") {
    73. expires.expire = new Date().getTime() + arguments[0].expire;
    74. localStorage.setItem("expire", JSON.stringify(expires));
    75. }
    76. }
    77. }
    78. //有2个参数 第1个是字符串,第2个是 expire对象时
    79. if (
    80. arguments.length == 2 &&
    81. $.type(arguments[0]) == "string" &&
    82. arguments[0] != "" &&
    83. $.type(arguments[1]) == "object" &&
    84. Object.keys(arguments[1]).length == 1 &&
    85. "expire" in arguments[1]
    86. )
    87. expire = arguments[1].expire;
    88. //保存当前 expire
    89. if (expire && $.type(expire) == "object") {
    90. expires[name] = new Date().getTime() + expire.expire;
    91. localStorage.setItem("expire", JSON.stringify(expires));
    92. }
    93. if (value == null || value == "") return this;
    94. if ($.type(value) == "object" || $.type(value) == "array")
    95. value = JSON.stringify(arguments[1]);
    96. localStorage.setItem(name, value);
    97. return this;
    98. },
    99. removeStorage: function (name) {
    100. if (name == null) localStorage.clear();
    101. else localStorage.removeItem(name);
    102. return this;
    103. },
    104. session: function (name, value) {
    105. if (name == null) return sessionStorage; //没有参数时,返回原生 sessionStorage
    106. if (value == null) {
    107. var ret = sessionStorage.getItem(name);
    108. if (this.isJson(ret)) ret = JSON.parse(ret);
    109. return ret;
    110. }
    111. if ($.type(value) == "object" || $.type(value) == "array")
    112. value = JSON.stringify(value);
    113. sessionStorage.setItem(name, value);
    114. return this;
    115. },
    116. removeSession: function (name) {
    117. if (name == null) sessionStorage.clear();
    118. else sessionStorage.removeItem(name);
    119. return this;
    120. },
    121. cookie: function (name, value, options) {
    122. var cookie = document.cookie.replace(" ", "");
    123. //当没有参数时 返回原生 cookie 对象
    124. if (arguments.length == 0) return unescape(cookie);
    125. if (name == null || $.type(name) != "string" || name == "") return;
    126. //当只有一个参数时 返回 value 值, 当第二参数为布尔型时 true : 返回 json 所有数据。 false : 与一个参数时相同。
    127. if (arguments.length == 1 || (arguments.length == 2 && $.type(arguments[1]) == "boolean")) {
    128. var json = {};
    129. $.each(cookie.split(";"), function (i, str) {
    130. var arr = str.split("=");
    131. json[arr[0]] = unescape(arr[1]);
    132. });
    133. if (arguments.length == 2 && arguments[1]) return json;
    134. //读取 name 值
    135. var ret = unescape(json[name]);
    136. //如果是JSON字符串,转成JSON对象
    137. if (this.isJson(ret)) ret = JSON.parse(ret);
    138. return ret;
    139. }
    140. //以下是写入cookie
    141. var str = ";";
    142. // json { domain : '', path : '', expires : 0, secure : '' } expire 或 expires 都可以 单位豪秒
    143. // expire 或 expires 参数 格式 {expire : 1} 注:expire.expire 的值 等于过期时间减去当前时间, 一个大于0的值,单位毫秒。
    144. if (options || $.type(options) == "object") {
    145. //把 expire 属性 修正为 expires
    146. if ("expire" in options && options.expire && $.type(options.expire) == "number") {
    147. options.expires = options.expire;
    148. delete options.expire;
    149. }
    150. //处理过期时间,单位毫秒
    151. if ("expires" in options && options.expires && $.type(options.expires) == "number") {
    152. var exp = new Date();
    153. exp.setTime(exp.getTime() + options.expires);
    154. options.expires = exp.toGMTString();
    155. }
    156. for (var key in options) {
    157. str += key + "=" + options[key] + ";";
    158. }
    159. }
    160. document.cookie = name + "=" + escape(value) + str;
    161. return this;
    162. },
    163. removeCookie: function (name, options) {
    164. return this.cookie(name, "", $.extend(options, { expires: -1, }));
    165. },
    166. });
    167. })(jQuery);
    168. $.storage("a", "localStorage");
    169. console.log($.storage("a"));
    170. $.removeStorage("a");
    171. console.log($.storage("a"));
    172. $.session("b", "sessionStorage");
    173. console.log($.session("b"));
    174. $.removeSession("b");
    175. console.log($.session("b"));
    176. $.cookie("c", "cookie");
    177. console.log($.cookie("c"));
    178. $.removeCookie("c");
    179. console.log($.cookie("c"));
    180. };