我想展示之前写的所有键和存储。我的代码如下。我创建了一个函数(allStorage),但是它不起作用。我怎样才能做到这一点?
function storeUserScribble(id) {
var scribble = document.getElementById('scribble').innerHTML;
localStorage.setItem('userScribble',scribble);
}
function getUserScribble() {
if ( localStorage.getItem('userScribble')) {
var scribble = localStorage.getItem('userScribble');
}
else {
var scribble = 'You can scribble directly on this sticky... and I will also remember your message the next time you visit my blog!';
}
document.getElementById('scribble').innerHTML = scribble;
}
function clearLocal() {
localStorage.clear();
return false;
}
function allStorage() {
var archive = [];
for (var i = 0; i<localStorage.length; i++) {
archive[i] = localStorage.getItem(localStorage.key(i));
}
}
如果您将功能修改为此,则可以基于键列出所有项目(仅列出项目):
function allStorage() {
var values = [],
keys = Object.keys(localStorage),
i = keys.length;
while ( i-- ) {
values.push( localStorage.getItem(keys[i]) );
}
return values;
}
Object.keys
是JavaScript(ECMAScript 5)的新增功能。它列出了对象上所有自己的键,这比使用for-in循环更快。
但是,这不会显示键。为此,您需要返回一个对象而不是一个数组(这是毫无意义的IMO,因为这将带给您与使用另一个对象的localStorage一样远的功能-举例来说):
function allStorage() {
var archive = {}, // Notice change here
keys = Object.keys(localStorage),
i = keys.length;
while ( i-- ) {
archive[ keys[i] ] = localStorage.getItem( keys[i] );
}
return archive;
}
如果您想要一个紧凑的格式列表,请改为执行此操作-在此数组中的每个项目都将具有key=item
,您以后可以将其拆分成对,依此类推:
function allStorage() {
var archive = [],
keys = Object.keys(localStorage),
i = 0, key;
for (; key = keys[i]; i++) {
archive.push( key + '=' + localStorage.getItem(key));
}
return archive;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句