3

質問が正確かどうかはわかりませんが、localstorage 配列から値を変更しようとしています。

これは私のローカルストレージがどのように見えるかです:

[{"id":"item-1","href":"google.com","icon":"google.com"},
{"id":"item-2","href":"youtube.com","icon":"youtube.com"},
{"id":"item-3","href":"google.com","icon":"google.com"},
{"id":"item-4","href":"google.com","icon":"google.com"},
{"id":"item-5","href":"youtube.com","icon":"youtube.com"},
{"id":"item-6","href":"asos.com","icon":"asos.com"},
{"id":"item-7","href":"google.com","icon":"google.com"},
{"id":"item-8","href":"mcdonalds.com","icon":"mcdonalds.com"}]

重要なのは「結果」です。

どうすれsetItemid:item-6, href:. たとえば。項目-6のhrefはasos.com. それをに変更するにはどうすればよいstackoverflow.comですか?

私はそれが次のようなものになると仮定します:

localStorage.setItem("result", JSON.stringify( ??? ));

編集:

ローカルストレージからデータを取得することはすでに達成しています: ここに作業フィドルがあります: http://jsfiddle.net/kZN4y/。同じコーディングを使用して、更新クリックに記載されている値を更新したいと思います。それは可能ですか?

ありがとう

4

2 に答える 2

3

個人的には、オブジェクト全体を処理する関数を作成することを躊躇しません。あなたの場合は次のようになります。

var blob = [{"id":"item-1","href":"google.com","icon":"google.com"},
{"id":"item-2","href":"youtube.com","icon":"youtube.com"},
{"id":"item-3","href":"google.com","icon":"google.com"},
{"id":"item-4","href":"google.com","icon":"google.com"},
{"id":"item-5","href":"youtube.com","icon":"youtube.com"},
{"id":"item-6","href":"asos.com","icon":"asos.com"},
{"id":"item-7","href":"google.com","icon":"google.com"},
{"id":"item-8","href":"mcdonalds.com","icon":"mcdonalds.com"}];

// define helper functions
Storage.prototype.setBlob = function (blob)
{
    for (i in blob) {
        // example of storageObjet: {'item-3': {'href': 'google.com', 'icon': 'google.png'}}
        var struct={};
        for (key in blob[i]) {
            if (key != 'id') {
                struct[key] = blob[i][key];
            }
        };
        this.setObject(blob[i].id, struct);
    }
}


Storage.prototype.setObject = function(key, obj) {
    this.setItem( key, JSON.stringify(obj) );    
};

Storage.prototype.getObject = function(key) {
    return JSON.parse(this.getItem(key));
};

// do stuff
sessionStorage.clear();
sessionStorage.setBlob(blob);

var key = 'item-6';
var item = sessionStorage.getObject(key);
item.href = 'stackoverflow.com';
sessionStorage.setObject(key, item);

for (key in sessionStorage) {
    if (typeof(sessionStorage[key]) == 'string') {
        var item2 = sessionStorage.getObject(key);
        $('#stuff').append( $('<div>').html(item2.href) );
    }
}

このjsfiddleをチェックしてください

注意: この例では、localStorage の代わりに sessionStorage を使用していますが、インターフェイスは同じで、どちらも Storage プロトタイプを使用しています。

ご覧のとおり、各アイテムの構造を {'item-3': {'href': 'google.com', 'icon': 'google.png'}} のように変更します。私がこれを行うのは、javascript、localStorage、および全体的なキー/値の概念をより適切に反映し、使用を大幅に容易にするためです。

この例では、次のものがあります。

var item = sessionStorage.getObject(key);
item.href = 'stackoverflow.com';
sessionStorage.setObject(key, item);

これは、localStorage を処理するための非常に実用的な方法に見えます。

さらに、「setBlob」関数は、アイテムごとにランダムで可変数の要素を処理できます。これにより、必要に応じて 5 つの属性を持つ 1 つのアイテムを持つことができますが、他のすべてのアイテムには 2 つの属性があります。キー「id」で呼び出される 1 つの要素がある限り、「フラット」構造で機能します。

編集: デバッグし、より古典的な setValue(key, item); に切り替えました。

于 2011-11-12T14:16:02.727 に答える
0

あなたの質問は完全に明確ではありませんが、うまくいけばこれが役に立ちます。

localStorage はキー/値ストアであるため、各キーは一意の値である必要があります。特定のキーの json オブジェクトを保存する場合は、文字列化して保存し、解析して取得する必要があります。

通常、値を取得/設定するためのユーティリティ関数をいくつか記述します。

var get = function(key){
    return JSON.parse(localStorage.getItem(key));
}

var set = function(key, val){
    localStorage.setItem( JSON.stringify(val) );
}

次に、コードで get() から返されたオブジェクトを更新し、そのオブジェクトを set() に渡します。これにより、そのオブジェクトが localStorage に戻されます。

返されたオブジェクトの値の更新は、js オブジェクトの値の標準的な更新です。

于 2011-11-12T12:54:01.350 に答える