如何按组删除HTML5的本地存储?

时间:2015-04-27 05:19:20

标签: javascript html5

我正在动态创建localstorage,如下所示

window.localStorage["DBname"+count]=JSON.stringify(values)

同时我也在创建一些其他本地存储,如

window.localStorage["login_detail"]=login_string

window.localStorage["page_config"]=page_config

所以我不能使用window.localStorage.clear(),因为它会清除我不想要的所有本地存储,而且我也不能使用窗口。localStorage.removeItem["DBname"+count]因为我知道有多少"计数& #34;执行时会来。

那么有什么办法可以删除localstorage这样的组删除类吗?帮助我。

3 个答案:

答案 0 :(得分:2)

简单解决方案

var prefix = "DBname",
    continue = true, 
    on = 0;

while (continue) {

    continue = localStorage.getItem(prefix + on)?true:false;

    try { localStorage.removeItem(prefix + on);  } catch (e) { continue = false; }
    on += 1;
}

这将删除以DBname

开头的所有本地存储项

测试

开始:

  • DBname1
  • DBblah
  • DBnameCats
  • DBname 2
  • DBname 3

结束:

  • DBblah
  • DBnameCats

更好的解决方案

var keys = Object.keys(localStorage),
    prefix = "DBname";
for (var i = 0; i < keys.length; i += 1) {
    if (keys[i].indexOf(prefix) === 0) {
        localStorage.removeItem(keys[i]);
    }
}

测试

开始:

  • DBname1
  • DBblah
  • foobar的
  • DBnameCats
  • DBname 2
  • DBname 3

结束:

  • DBblah
  • foobar的

处理支持

添加以下一行:

Object.keys||(Object.keys=function(r){var e=[];for(var n in r)r.hasOwnProperty(n)&&e.push(n);return e});

这样,您就可以在几乎所有浏览器上使用更好的解决方案

答案 1 :(得分:0)

我想您可以遍历LocalStorage中的所有元素,并找到您想要逐个删除的键。

一个简单的例子是:

function clearLocalStorageByKeyMatch(word) {

    // Find items in the array where he key contains the word 'word'
    var filtered = localStorage.filter(function(item, key) {
        return key.indexOf(word) > -1;
    });

    Object.keys(filtered).forEach(function(item) {
        localStorage[item] = null;
    });

}


// clear localStorage where config word appear
// clearLocalStorageByKeyMatch('config');

您还可以查看为您处理此问题的库。

答案 2 :(得分:0)

通过localStorage键/项目进行迭代 - 否

迭代所有localStorage密钥并不是一个好的解决方案。由于localStorage也可以被其他应用程序使用,因此迭代localStorage中的所有项目然后删除它们是非常低效的。

什么是最佳方法

由于您是应用程序的所有者,因此最好能够维护计数。在粗略的层面上,你可以保持&#34;计数&#34;你想在将来删除,可能是localStorage本身的count的开始和结束位置。

一旦你知道了开始&amp;结束限制&#34;计数&#34; - 迭代并删除所有&#34; DbName + Count&#34;在localStorage中找到。

另一种解决方法

您可以将一个实体作为应用程序的JSON对象。可以想一想,因为你是所有localStorage项目的名称,并将所有这些项目封装在一个变量中。

var myApp={
"Dbname1":{},
"Dbname2":{},
"login_detail":{},
"page_config":{}
};

将其保存到localStorage:

localStorage["myApp"]=JSON.stringify(myApp);

用于检索它:

var myApp=JSON.parse(localStorage["myApp"]);
//now you can delete whatever db you want from `myApp` and save it back to localStorage.

这将使您的代码远离其他应用程序。