2016-04-18 2 views
0

商品を保管するために、sessionstorageを使用しているショッピングカートがあります。ユーザーが「カートに追加」をクリックすると、クリック数に等しいキーとアイテム名に等しい値を持つ新しいオブジェクトが保存されます。私はループの値を読み取るためにこれを使用します:このsessionstorageの命名システム/ forループを改善する方法は?

for (var i = 0; i < sessionStorage.length -1; i++) { 
if(sessionStorage.getItem(i + 1) != null) { 
... 
"<span class='item'>" + sessionStorage.getItem(i + 1) + "</span>" + 

ここに問題があります。私はカートから5の3の項目を削除します。別のアイテムを追加すると「6」と呼ばれますが、アイテムは1,2,4,5,6になります。forループはアイテム1,2,4および5のみを認識します。アイテム6を認識するにはどうすればいいですか?私はforループチェックを50にすることですばやく修正しましたが、これはちょっとばかげてリソースの枯渇のように思えます...

+1

これはあなたにとって役に立ちます:http://stackoverflow.com/questions/3357553/how-to-store-an-array-in-localstorage –

+0

@EvanTrimboliありがとう、これは便利ですが、残念ながらJSONを使ってメソッドに変換するのはしばらく時間がなくなりました。たぶん次回はそういう解決策をやるつもりです。 –

答えて

1

技術的には、それぞれのループで問題を解決できます。

for (var e in sessionStorage) { 
    document.write(e + '=>' + sessionStorage[e]); 
} 

ただし、どのように要素にアクセスしても問題ありません。この場合、sessionStorageを使用すると、設計上の選択肢が狭すぎます。 まず、sessionStorageは同じページの異なるスクリプト間で共有されるリソースなので、他のスクリプト(たとえば、使用するライブラリ)によってsessionStorageに何かが追加され、スクリプトが乱れることがあります。 JSONを使用してシリアル化し、独自のキーでsessionStorageを設定するなど、データをカプセル化することで、長期的にはさらに役立ちます。

+0

私はJSONとのシリアル化を理解し、それにユニークなキーを与えていますが、「あなたのスクリプトに対するユニークなキー」は分かりません。特定のスクリプトファイルにsessionStorageを具体的にマップする方法はありますか? –

+0

私が意図したことは、 'sessionStorage ['__ productName_Cart'] = ...'のようなものと簡単に衝突しない鍵を持つことでした。キーを特定のスクリプトファイルに具体的にマッピングすることはありません。ページの一部としてロードされたすべてのスクリプトファイルは、そのページのセッションストレージ内のすべてのキーを見ることができます。 – regulus

+0

私は参照してください。ありがとうございました。 –

関連する問題