4

同じ名前を使用しても、多くの異なる値が別々に保存され、リストに表示される可能性はありますか?

例えば:

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

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

誰かが入力フィールドに何かを入力して保存をクリックするたびに、localstorage は同じ名前で値を保存するだけですが、最新の入力値に置き換えられるなど、ストレージが保存される方法と競合しますか?

また、キャッシュをクリアするときにローカルストレージがクリアされないようにする方法はありますか?

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

これは、非常に単純なテスト ページで非常に簡単に判断できます。キーごとに 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 つだけです。

1 つのキーワードの背後にさらに多くの値を格納するには、次の 2 つの方法があります。

  1. などを使用localStorage['justified_0']localStorage['justified_1']ます。
  2. 複数の値を配列に格納し、JSON に変換してから格納しlocalStorage['justified']、読み取り後に配列に戻します。

キャッシュをクリアしても、ローカル ストレージはクリアされません。

于 2010-05-14T22:40:57.087 に答える