輕量級外掛sdstorage用於操作localStorage支援過期、批量搜尋刪除等
前言
專案中在某一介面需要做較為複雜的互動,為方便處理,多數資料操作都前端完成,最終儲存時才儲存到資料庫,為了保證介面意外關閉再開啟時資料仍保持,則需要將資料儲存在本地,本來是想用cookie
的,想到資料大小有限制(4k
),只好換用localStorage
,然而localStorage
不支援過期,只好自己寫個外掛來滿足要求。
外掛原始碼
/*!
* Copyright (C) Corporation. All rights reserved.
*
* Author : lihaitao
* Email : lhtzbj12@126.com
* Create Date : 2017-10-18
* Description : localstorage 操作工具 、支援過期處理、Key批量刪除已過期等
* Version : V1.0.0
*
* Revision History:
* Date Author Description
* 2017-10-18 lihaitao 完成第一版本
*
*/
var sdstorage = function () {
var lstorage = window.localStorage;
//儲存傳入key data 多長時間過期,預設不過期
function save(dkey, data, expires) {
if (!lstorage) return false;
expires = calculateExpiration(expires);
var expiretime = 0; //不過期
if (expires) {
expiretime = expires;
}
var obj = {sdata: data, exp: expiretime};
//儲存
try {
lstorage[dkey] = JSON.stringify(obj);
return true;
}
catch (e) {
console.error(e);
return false;
}
return false;
}
//獲取過期或者不存在都返回 ''
function get(dkey) {
if (!lstorage) return '';
var str = lstorage[dkey];
if (str) {
try {
var obj = JSON.parse(str);
//判斷是否過期
var now = new Date().getTime();
if (obj.exp && (obj.exp === 0 || obj.exp > now)) {
//console.log('key:' + dkey + ',離過期還有 ' + (obj.exp - now) / 1000 + ' 秒');
return obj.sdata;
} else {
//過期則刪除
remove(dkey);
}
} catch (e) {
console.error(e);
return '';
}
}
return '';
}
//清除所有,如果傳入前輟,則只清除前輟為prefix的
function clear(prefix) {
if (!lstorage) return;
if (prefix) {
for (var i = 0; i < lstorage.length; i++) {
var key = lstorage.key(i);
//如果prefix有值,則只處理前輟相同的
if (key.indexOf(prefix) === 0) {
lstorage.removeItem(key);
}
}
} else {
lstorage.clear();
}
}
//刪除單條
function remove(dkey) {
if (!lstorage) return;
lstorage.removeItem(dkey);
}
//清除過期,傳入key前輟,則只除以prefix開始已經過期的資料
function removeexp(prefix) {
if (!lstorage) return;
for (var i = 0; i < lstorage.length; i++) {
var key = lstorage.key(i);
//如果prefix有值,則只處理前輟相同的
if (!prefix || key.indexOf(prefix) === 0) {
get(key);
}
//console.log(key);
}
}
//檢測瀏覽器是否支援
function test() {
if (lstorage) {
return true;
} else {
return false
}
}
//計算過期時間
var calculateExpiration = function (cookieExpire) {
if (cookieExpire === null || typeof cookieExpire === 'undefined') {
return null;
}
var time = cookieExpire.replace(/[0-9]*/, ''); //s,mi,h,d,m,y
cookieExpire = cookieExpire.replace(/[A-Za-z]{1,2}/, ''); //number
switch (time.toLowerCase()) {
case 's':
cookieExpire = cookieExpire;
break;
case 'mi':
cookieExpire = cookieExpire * 60;
break;
case 'h':
cookieExpire = cookieExpire * 60 * 60;
break;
case 'd':
cookieExpire = cookieExpire * 24 * 60 * 60;
break;
case 'm':
cookieExpire = cookieExpire * 30 * 24 * 60 * 60;
break;
case 'y':
cookieExpire = cookieExpire * 365 * 24 * 60 * 60;
break;
default:
cookieExpire = cookieExpire;
break;
}
var d = new Date().getTime();
cookieExpire = d + cookieExpire * 1000;
return cookieExpire;
};
return {
//檢測是否支援
test: test,
//儲存傳入key data 多長時間過期,預設不過期,單位 s(秒) mi(分鐘) h(小時) d(天) m(月) y(年)
//成功返回true,或者false
save: save,
//獲取,不存在或者過期 返回 ''
get: get,
//根據key刪除
remove: remove,
//刪除已經過期的 傳入key前輟,則只除以prefix開始已經過期的資料
removeexp: removeexp,
//清除所有 如果傳入前輟,則只清除前輟為prefix的
clear: clear,
};
}();
方法
test
作用:判斷瀏覽器是否支援,返回true false
sdstorage.test()
save
作用:儲存資料,返回 true false
引數1:資料的key
引數2:資料,只支援str
,如果是JSON
,使用JSON.stringify()
轉成字串
引數3:有效期,單位 s(秒) mi(分鐘) h(小時) d(天) m(月) y(年),不傳值則不過期
var key = 'users_info';
var data={'username':'lhtzbj12'};
sdstorage.save(key,JSON.stringify(data),'2d');//有效期2天
get
作用:獲取資料,如果資料過期返回”,並刪除
引數1:資料的key
var key = 'users_info';
var str = sdstorage.get(key);
remove
作用:刪除資料
引數1:資料的key
var key = 'users_info';
sdstorage.remove(key);
removeexp
作用:刪除過期的資料
引數1:資料key
的前輟,不傳值則刪除所有過期資料
var prefix = 'users_';
sdstorage.removeexp(prefix);//刪除所有key以'users_'開始的過期資料
sdstorage.removeexp();//刪除所有過期資料
clear
作用:刪除若干資料
引數1:資料key
的前輟,不傳值則刪除所有資料
var prefix = 'users_';
sdstorage.clear(prefix);//刪除所有key以'users_'開始的資料
sdstorage.clear();//刪除所有資料
相關文章
- 一個用於建立react+Figma外掛的輕量級的UI庫ReactUI
- VS Code 輕量級外掛推薦
- vue+element-ui操作刪除(單行和批量刪除)VueUI
- Spring Boot整合Postgres實現輕量級全文搜尋Spring Boot
- [外掛擴充套件]通過標題搜尋站外資訊套件
- zinc:替代elasticsearch的輕量級Go語言搜尋引擎ElasticsearchGo
- Lucene輕量級搜尋引擎,真的太強了!!!Solr 和 ES 都是基於它Solr
- js輕量級計數器動畫特效外掛JS動畫特效
- win10搜尋web和windows怎麼去掉_win10搜尋web和windows刪除操作步驟Win10WebWindows
- redis 過期鍵刪除策略Redis
- MnasNet:經典輕量級神經網路搜尋方法 | CVPR 2019神經網路
- Docker批量操作(啟停、刪除、歸檔、載入)Docker
- php(js)批量刪除/單個刪除PHPJS
- 輕量級滑塊Swiper外掛釋出(僅3kb)
- 分享一個瀏覽器外掛:搜尋引擎結果過濾器瀏覽器過濾器
- 二叉搜尋樹如何刪除節點
- 批量刪除 redis keysRedis
- win10怎麼刪除搜尋框記錄_win10系統刪除搜尋框記錄的步驟Win10
- RocketMQ -- 過期檔案的刪除MQ
- oracle資料庫建立、刪除索引等操作Oracle資料庫索引
- oc-plugin-music 音樂聚合搜尋外掛Plugin
- 滴滴開源 DroidAssist : 輕量級 Android 位元組碼編輯外掛Android
- rellax-純js輕量級滾動視覺差特效外掛JS視覺特效
- 推薦一個 ASP.NET Core 的輕量級外掛框架ASP.NET框架
- PHP輕量級影視電影視訊搜尋播放器原始碼PHP播放器原始碼
- localStorage設定過期時間
- Intellij外掛之除錯停止生命週期IntelliJ除錯
- ELK批量刪除索引及叢集相關操作記錄索引
- Linux批量刪除檔案Linux
- 批量刪除容器和映象
- git 批量刪除本地分支Git
- oracle rman 刪除過期的歸檔Oracle
- kafka-- 過期檔案的刪除Kafka
- 直播軟體app開發,刪除主頁搜尋框APP
- Java實現二叉搜尋樹的插入、刪除Java
- 二分搜尋樹系列之[ 節點刪除 (remove) ]REM
- 二分搜尋樹系列之「 節點刪除 (remove) 」REM
- 「效率集」聚合搜尋,瀏覽器必備的資源與資訊搜尋外掛瀏覽器