2013-06-28 123 views

回答

10

不幸的是沒有。

localStorage僅支持string類型,因此您必須在保存之前先對JSON進行排序,這意味着您需要先加載並解析它,然後才能向其添加任何內容。

你可以寫一個簡單的包裝要做到這一點(可支持各種類型):

function appendItem(key, data) { 

    var t = data.constructor, tmp; 

    switch(t) { 

     case Array: 
      tmp = localStorage.getItem(key); 
      tmp = (tmp === null) ? [] : JSON.parse(tmp); 
      tmp.push(data); 

      localStorage.setItem(key, JSON.stringify(tmp)); 
      break; 

     case String: 
      //... and so forth 
    } 
} 

(錯誤和同類型檢查也必須在這種方法中實現)。

(可選)您可以使用延遲寫入方法,以便您可以更高效地填充陣列(突發寫入),並且僅在需要時將數據更新爲localStorage。在這裏您可以初始加載現有的數組,然後在數據添加到數組時進行更新。

您可以烤到這一點對每個數組的對象,但是爲了簡單:

var a = []; //load existing array at init 
var timer; 
var key = 'myArray'; 

//append data to array and re-start timer 
function appendArray(item) { 

    clearTimeout(timer); 
    a.push(item); 

    timer = setTimout(writeData, 2000); //wait 2 seconds to write last append(s) 
} 

//write the data if dirty 
function writeData() { 
    localStorage.setItem(key, JSON.stringify(a)); 
} 

爲了安全,你可以訂閱window.onunload事件,當用戶離開當前頁面離開做最後的寫操作。

相關問題