2012-03-05 30 views
8

với localStorage tôi có một tải trọng của các mặt hàng không xác định lưu với tên động sử dụng một không gian tên dữ liệu như vậy:đối tượng thanh toán bù trừ từ localStorage

localStorage["myAppName.settings.whatever"] = something.whatever; 

//and this: 
localStorage["myAppName.data."+dynObj.name] = dynObj.data; 

Tôi muốn giữ lại các thiết lập nhưng không phải là dữ liệu. Tuy nhiên tôi sẽ không bao giờ biết tất cả những cái tên bên trong đối tượng dữ liệu của tôi là gì nên tôi không thể xóa chúng riêng lẻ được. Tôi cần phải xóa những điều này mỗi khi ứng dụng của tôi được tải nhưng tôi phải giữ các cài đặt để localstorage.clear() không phải là một tùy chọn.

Tôi đã thử:

localstorage.removeItem("myAppName.data") 

nhưng không có con xúc xắc.

Bất cứ ai cũng có bất kỳ suy nghĩ nào về cách xóa các phần được đặt tên động của lưu trữ cục bộ?

+0

Đó là một sự xấu hổ mà localStorage không bao gồm một không gian tên như một phần của API cơ bản. Trong khi đó, có điều này: https://github.com/joelarson4/LSNS – jlarson

Trả lời

2

thử một cái gì đó giống như

var i = localStorage.length, key; 
while (i--) { 
    key = localStorage.key(i); 
    if (key.slice(0, 19) !== "myAppName.settings.") { 
    localStorage.remove(key); 
    } 
} 
0

thử một cái gì đó như thế này?

// Select current settings 
var settings = localStorage["myAppName.settings"] || {}; 
// Clear localStorage 
localStorage.clear(); 
// Add settings to localStorage 
localStorage["myAppName.settings"] = settings; 
+0

Nó phải là localStorage.clear(), không phải localstorage với các s nhỏ. – Sindre

0

Giả sử một món quà this.namespace (trong trường hợp của tôi 'session') và thư viện gạch:

_.each(_.keys(localStorage), function(key) { 
    if (RegExp("^" + this.namespace + "\\.").test(key)) { 
    return localStorage.removeItem(key); 
    } 
}); 

Và với CoffeeScript:

_.each _.keys(localStorage), (key) -> 
    if ///^#{@namespace}\.///.test(key) 
    localStorage.removeItem(key) 
Các vấn đề liên quan