4

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

例如:

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

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

每次有人在输入框中输入内容,然后点击保存,localstorage 只会保存同名的值,但是,这是否与 storage 的保存方式冲突,比如被替换为最新的输入值?

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

4

3 回答 3

8

实际上 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 中检索数据时就不会那么麻烦了。

于 2010-05-15T05:36:38.297 回答
1

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

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

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);
}

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

于 2010-05-14T22:36:31.520 回答
1

不可以。您只能在 localStorage 条目中存储一个值。

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

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

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

于 2010-05-14T22:40:57.087 回答