我有几个项目存储在本地存储中。页面加载的内容,我有大约20行:
var SomeVar = localStorage.getItem('SomeKey');
我想更改此内容并在一次读取中获取所有存储数据,将其存储在临时对象中,并从该临时对象中获取20个变量。
如何在一次读取中读取本地存储?
感谢。
答案 0 :(得分:0)
我想不出你想要这样做的原因,但你可以利用localStorage
基本上是一个对象并做这样的事实:
var tempLocalStorage = {};
for(prop in localStorage) {
if(localStorage.hasOwnProp(prop)) {
tempLocalStorage[prop] = localStorage.getItem(prop);
}
}
var SomeVar = tempLocalStorage["SomeKey"];
我循环遍历localStorage
中的值并将它们添加到临时本地存储变量中。然后,您可以使用与标准localStorage
相同的键访问临时本地存储变量,但使用标准对象属性语法,而不是getItem()
使用的自定义localStorage
语法。
修改:这是一个建议。将所有变量保存到一个对象,然后从localStorage
加载并保存该对象,而不是保存单独的对象。这是访问花费最多时间的调用的单个变量。根据{{1}} localStorage
优化this post,将单个变量中的10个字符读取到内存中需要大约相同的时间才能读取1000个。
答案 1 :(得分:0)
您可以将所有变量保存在单个对象中,并使用JSON将其转换为字符串和从字符串转换:
// read:
var localvars = JSON.parse(localStorage.myvars || '{}');
// copy from temporary object to desired variable:
var someVar = localvars.someKey;
// write:
localStorage.myvars = JSON.stringify(localvars);
如果使用此方法,则必须注意不要在localvars
中存储任何递归变量,因为这会导致JSON.stringify
失败。但这不是一个真正的问题,因为无论如何你都无法在localStorage
中存储这些结构。
我不建议在localStorage上使用for-in循环,因为您不应该假设您的脚本是唯一访问localStorage
的脚本。
答案 2 :(得分:0)
你看过jStorage了吗? http://www.jstorage.info/我使用它很多,它似乎做了类似的事情,因为它将所有东西存储在一个对象下。也适用于旧版IE的跨浏览器。