使用localStorage的多个存储

时间:2010-05-14 22:16:14

标签: javascript html html5 storage local-storage

是否可能使用相同的名称可以分别存储许多不同的值并显示在列表中?

E.g:

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

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

每当有人在输入字段中输入内容并单击“保存”时,localstorage将仅以相同的名称保存该值,但这是否与保存存储的方式相冲突,如是否替换为最新的输入值?

另外,有什么方法可以防止在清除缓存时清除localstorage?

3 个答案:

答案 0 :(得分:7)

实际上localStorage'应该'能够存储整数,字符串和数组。我一直在使用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.parse()访问它:

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

如果您始终使用对象文字,那么您可以更轻松地跟踪如何存储以及如何从localStorage检索数据。

答案 1 :(得分:1)

使用非常简单的测试页面可以轻松确定这一点。每个键只能存储一个值,清除缓存时不会清除这些值。 (到目前为止我刚尝试过Firefox ...)

您可以通过编写自己的函数将值列表存储在单个键中:

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

编辑 oops它只支持存储的字符串;废话。好的,如果你有json2你会这样做:

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

当然,如果您想存储日期等,这会导致问题。

答案 2 :(得分:1)

没有。您只能在localStorage条目中存储一个值。

有两种方法可以在一个关键字后面存储更多值:

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