Javascript 如何在会话存储中使用相同的密钥更新阵列
我正在尝试将访问过的页面历史记录存储在会话存储中。 会话存储按我所希望的方式工作 问题: 当我访问第一、第二、第三和第四页,然后再次访问第二和第三页时,它不会再次使用第二和第三页更新阵列 没有在数组第2页和第3页中添加数据,这些已经存在,但我再次访问这些页面,然后应该将其添加到数组中 我想在数组中存储历史记录中访问的每个页面Javascript 如何在会话存储中使用相同的密钥更新阵列,javascript,arrays,local-storage,session-storage,Javascript,Arrays,Local Storage,Session Storage,我正在尝试将访问过的页面历史记录存储在会话存储中。 会话存储按我所希望的方式工作 问题: 当我访问第一、第二、第三和第四页,然后再次访问第二和第三页时,它不会再次使用第二和第三页更新阵列 没有在数组第2页和第3页中添加数据,这些已经存在,但我再次访问这些页面,然后应该将其添加到数组中 我想在数组中存储历史记录中访问的每个页面 if (window.sessionStorage) { var currentTite = document.title; var currentURL
if (window.sessionStorage) {
var currentTite = document.title;
var currentURL = window.location.href;
sessionStorage.setItem(currentTite, currentURL);
//var storedData = sessionStorage.getItem(currentTite);
for (i = 0; i <= sessionStorage.length - 1; i++) {
key = sessionStorage.key(i);
console.log(key);
val = sessionStorage.getItem(key);
console.log(val);
}
}
if(窗口会话存储){
var currentTite=document.title;
var currentURL=window.location.href;
setItem(currentTite,currentURL);
//var storedData=sessionStorage.getItem(currentTite);
对于(i=0;isessionStorage
对象不是数组。它是本地Storage
构造函数的一个实例,用于在页面导航上持久化数据。每个键只能有一个值。最好的办法是在history
键下命名会话中的历史,并在该键下存储JSON数组钥匙
以下是一个例子:
window.addEventListener('load',函数recordInHistory(){
var current=sessionStorage.getItem('history');
如果(!current){//检查项目是否已注册
current=[];//如果不是,则启动一个空数组
}否则{
current=JSON.parse(current);//否则解析
}
当前推送({
标题:document.title,
url:window.location.href
});//添加项
sessionStorage.setItem('history',JSON.stringify(current));//替换
})
这取决于您以后要如何处理数据。无论如何,由于会话存储是一个键值存储,您不能用相同的键保存不同的值,也不能在存储中有重复的键值对
作为一个选项,您可以存储用户历史记录数组,由对象({title:document.title,url:window.location.href}
)表示。代码如下所示:
var UserHistory = {
key: 'userHistory',
push: function() {
var cur = JSON.parse(sessionStorage.getItem(UserHistory.key)) || [];
cur.push({ title: document.title, url: window.location.href });
sessionStorage.setItem(UserHistory.key, JSON.stringify(cur));
},
get: function() {
return JSON.parse(sessionStorage.getItem(UserHistory.key));
}
}
UserHistory.get(); // null
UserHistory.push();
UserHistory.get(); // [ Object ]
setItem
的第一个参数是一个键,您可以附加一个随机数或Date.now()或一个计数器++值以使其唯一
if (window.sessionStorage) {
var currentTite = document.title;
var currentURL = window.location.href;
sessionStorage.setItem(currentTite + ':' + Date.now().toString(), currentURL);
for (i = 0; i <= sessionStorage.length - 1; i++) {
key = sessionStorage.key(i);
console.log(key);
val = sessionStorage.getItem(key);
console.log(val);
}
}
if(窗口会话存储){
var currentTite=document.title;
var currentURL=window.location.href;
sessionStorage.setItem(currentTite+':'+Date.now().toString(),currentURL);
对于(i=0;i如何在控制台中简单地获取所有细节?@puzzdboy有一个get
方法返回整个数据数组。然后您对其进行迭代。如何在控制台中简单地获取所有细节?@puzzdboy只需使用console.log(sessionStorage.getItem('history'))
@puzzdboy用您问题中的currentTite
变量替换'history'
没有什么错。如果您的javascript代码是从外部文件加载并在多个页面中使用的,我会这样做。包括Date.now()
在sessionStorage键中不是一个好主意。每次用户重新加载页面时,您都在创建另一组数据。您如何确定要加载的数据集和要删除的数据集?@Mottie您是对的,但这不是问题的目标吗?也许递增数字更合适。啊,是的,我想您是对的。我不知道why没有被使用。