17

わかりました、ここで例に従ってみました。ローカルストレージの配列にオブジェクトを追加して上書きしない方法がいくつかあることは知っていますが、少なくとも1つを見つけることができません.

オブジェクトを配列に格納するこのコードを取得しましたが、それ自体を上書きしています。誰かが私に何が欠けているのか教えてもらえますか? (そして、私は多くのことを見逃しているのではないかと心配しています)。

function addEntry() {
    var entryTitle = document.getElementById("entryTitle").value;
    var entryText = document.getElementById("entryText").value;
    var entry = {
        "title": entryTitle,
        "text": entryText
    };
    localStorage.setItem("entry", JSON.stringify(entry));
    var allEntries = [];
    allEntries.push(entry);
    localStorage.setItem("allEntries", JSON.stringify(allEntries));
};
4

5 に答える 5

43

使用するsetItemと、それ以前に存在していたアイテムが上書きされます。getItem古いリストを取得して追加し、それを localStorage に保存するために使用する必要があります。

function addEntry() {
    // Parse any JSON previously stored in allEntries
    var existingEntries = JSON.parse(localStorage.getItem("allEntries"));
    if(existingEntries == null) existingEntries = [];
    var entryTitle = document.getElementById("entryTitle").value;
    var entryText = document.getElementById("entryText").value;
    var entry = {
        "title": entryTitle,
        "text": entryText
    };
    localStorage.setItem("entry", JSON.stringify(entry));
    // Save allEntries back to local storage
    existingEntries.push(entry);
    localStorage.setItem("allEntries", JSON.stringify(existingEntries));
};

これは、上記を示すフィドルです。

于 2013-10-28T12:47:55.953 に答える
11

新しいエントリをプッシュする前にエントリを取得する必要があるかもしれません:

var allEntries = JSON.parse(localStorage.getItem("allEntries")) || [];
allEntries.push(entry); 
//etc...
于 2013-10-28T12:48:10.960 に答える