我正在尝试根据电子商务网站上的产品视图历史记录在localstorage中构建一个数组。每次用户查看产品页面时,我都希望将此页面的ID添加到本地存储中的数组中。
var itemArray = [];
var myItem = $("li#ref").data("ref");
itemArray.push(myItem);
var LS = {
set: function (key, val) {
return localStorage.setItem(key, JSON.stringify(val));
},
get: function (key) {
return JSON.parse(localStorage.getItem(key));
}
};
LS.set("Viewed", itemArray);
我遇到的问题是它从来没有构建一个数组我看到的最新产品只是覆盖了之前的产品所以我只得到一个条目。
你知道这是否有可能实现吗?
提前致谢
理查德
答案 0 :(得分:4)
您需要将新值附加到存储在本地存储中的现有数组,而不是新的空数组:
var LS = {
set: function (key, val) {
return localStorage.setItem(key, JSON.stringify(val));
},
get: function (key) {
return JSON.parse(localStorage.getItem(key));
}
};
var itemArray = LS.get('Viewed') || [];
var myItem = $("li#ref").data("ref");
if (itemArray.indexOf(myItem) !== -1) {
itemArray.push(myItem);
}
LS.set("Viewed", itemArray);
您可能还应检查该值是否已存在于数组中以避免重复。
答案 1 :(得分:0)
如果用户习惯性地使用此网站,则接受的答案会变得非常慢。只要用户查看任何内容,它就会解析并重新整理视图的整个历史记录。
http://rhaboo.org写到了这一点。你写的是:
var store = Rhaboo.persistent("Views");
if (store.views === undefined) //first run
store.write('views', []);
function onClick(page) { store.views.push(page); }
for (var i = 0; i<store.views.length; i++)
console.log(store.views[i]);
这将为每个视图重写两个localStorage条目:它使用链接列表,因此向末尾附加内容意味着重写新添加的链接(这是以前的新链接)以及编写新链接。这比重写整个历史要好得多。 Rhaboo几乎可以坚持任何东西,而不仅仅是字符串BTW:
store.views.write('last visited', new Date()); //I know it's an array. No prob.
BTW,我写了rhaboo。