2010-05-14 128 views
3

是否有可能使用相同的名称可以有多个不同的值单独存储并显示在列表中?使用localStorage存储多个存储

如:

function save() 
{ 
    var inputfield = document.getElementById('field').innerHTML; 
    localStorage['justified'] = inputfield; 
} 

<input type="text" id="field" onclick="save();" /> 

每当有人进入输入字段的东西,然后点击保存,在localStorage的将只保存值相同的名称,然而,这是否冲突存储的方式保存,就像被最新的输入值所取代一样?

此外,有什么办法来防止在清除缓存时清除localstorage?

回答

1

这是用一个非常简单的测试页很容易确定的。每个键只能存储一个值,并且在清除缓存时这些值不会被清除。 (我刚刚试过火狐到目前为止...)

您可以编写自己的函数来完成其存储在一个单一的关键值的列表:

function addToPersistentList(listName, value) { 
    var val = localStorage[listName] || []; 
    val.push(value); 
    localStorage[listName] = val; // THIS DOES NOT WORK 
} 

编辑哎呀只支持存储的字符串废话。确定好,如果你有json2你应该这样做:

function addToPersistentList(listName, value) { 
    var val = localStorage[listName] ? JSON.parse(localStorage[listName]) : []; 
    val.push(value.toString()); 
    localStorage[listName] = JSON.stringify(val); 
} 

当然,如果你想存储日期等

+0

试过Chrome,清除缓存不清除数据。但清除cookie“..和其他浏览器数据”清除它。 – JeroenEijkhof 2010-05-15 05:16:37

0

号可以存储在localStorage的入口只有一个值这会导致问题。

有两种方法来存储一个关键词背后更值:

  1. 使用localStorage['justified_0']localStorage['justified_1']等等。
  2. 在数组中存储多个值并将其转换为JSON,然后再存储在localStorage['justified']中,并在读取后将其转换回数组。

清除缓存不会清除本地存储。

7

其实localStorage'应该'能够存储整数,字符串和数组。我一直在一个记事本应用程序使用本地存储和保存使用对象的文字我的所有数据:

var someData = { 
    withvars: "and values", 
    init: function() { 
     // not sure if this works but it should. 
    }, 
    var1: { 
     subvar1: "data", 
     subvar2: "data2" 
    } 
}; 

然后存储它透过JSON.stringify():

localStorage.setItem(varName, JSON.stringify(someData)); 

然后用JSON日后访问。解析():

var dataBack = JSON.parse(localStorage.getItem("varName")); 

如果你总是使用对象常量,那么你将有较少的麻烦保持的如何存储跟踪和如何从localStorage的检索数据。