2011-10-06 76 views
3

我做了如何附加到HTML5 localStorage?

localStorage.setItem('oldData', $i("textbox").value); 

到的關鍵oldData值設置爲一個文本框中的值。

下次給文本框輸入內容時,我想追加到已有的oldData

所以,如果我進入蘋果然後橘子在我的文本框,我localStorage的關鍵oldData應該是這樣的:

最初:

Key  | Value 
--------------------------- 
oldData | apples 

現在:

oldData | apples oranges 

我該如何追加? 提供的方法是否有append

或者我需要先讀取數據,在javascript中追加,然後回寫?

+0

您可以檢索密鑰的curent值,然後添加新值... – Cristy

+0

@Cristy:那麼localStorage API沒有提供附件? – Lazer

+0

我不知道,從來沒有使用它,但這可以工作,直到有人發佈「附加」方法:) – Cristy

回答

15

沒有append功能。這並不難寫一個,但:

function appendToStorage(name, data){ 
    var old = localStorage.getItem(name); 
    if(old === null) old = ""; 
    localStorage.setItem(name, old + data); 
} 

appendToStorage('oldData', $i("textbox").value); 

注:它更有意義的localStorage對象上定義一個函數append但是,因爲localStorage有一個setter,這是不可能的。如果您嘗試使用localStorage.append = ...定義函數,則localStorage對象將將此嘗試解釋爲「將名爲append的對象保存到存儲對象」中。

+0

我想我在這裏發現了一個錯誤,我不確定OP想要寫入localStorage的內容,但是因爲您需要使用JSON語法,所以請確保**正確分離**您的對象,數組等'localStorage.setItem(name,old + data);'用一個簡單的'+'連接可能欺騙你。 –

+0

@KovácsImre'localStorage'只存儲字符串,這正是OP想要的,因此'localStorage.setItem(name,old + data);'是正確的。如果你想存儲非字符串,那麼你需要一個自定義(de)序列化方法。 JSON語法是實現這一點的一種便捷方式,但絕不是必需的。 –

+0

在這種情況下,這是真的。 –

6

這不是一個好的解決方案,但它的工作原理和性能。

localStorage.setItem("fruit", "Apples"); 

localStorage.setItem("fruit", localStorage.getItem("fruit") + "Orange"); 
+0

這與HTML5本地存儲有什麼關係?編輯您的ansewar以匹配問題。 – Cristy

+0

對不起。據瞭解,他希望無論哪種方式的信息存儲(html日期localStorage,JavaScript變量等)。所以建議使用html日期,因爲與JavaScript變量相比,建議使用更好的性能的方法。 –

1

我發現這個here

interface Storage { 
    readonly attribute unsigned long length; 
    DOMString? key(unsigned long index); 
    getter DOMString getItem(DOMString key); 
    setter creator void setItem(DOMString key, DOMString value); 
    deleter void removeItem(DOMString key); 
    void clear(); 
}; 

好像它只有的getItem,setItem,的removeItem,清​​晰,重點和長度。