2014-02-21 52 views
1

我有这个代码为localStorage分配对象。如何在标签页/窗口关闭后删除它?如何分配对象而不是密钥如何删除localstorage?

localSotrage['data'] = JSON.stringify({folder1: {logedIn: 1}, folder2: {logedIn: 0}, folder3: {logedIn: 1}});

我尝试使用

delete window.localStorage['data']window.localStorage.removeItem(data)localStorage.removeItem(data)

,但不工作。当我关闭浏览器并再次访问它时,它引导我直接进入着陆页。任何帮助如何做到这一点?感谢很多提前

+3

'localStore.removeItem(“数据”)' – tymeJV

+0

只能替换本地存储的内容;不要删除它 – 2014-02-21 23:57:24

+1

@ aliasm2k:当然你可以删除它。 –

回答

1

如果你想这种行为我认为你应该使用的sessionStorage,但在这种特殊情况下,我将使用:

window.onbeforeunload = function() { delete localStorage['data']; };

要删除的价值和它的键,将其设置为null会将钥匙留在原地。

通过您的代码中拼错的localStorage方式,只是让你知道=)

+0

谢谢你的回答。我没有使用sessionStorage,因为我不想使IOS浏览器复杂化。我会尝试你的答案并让你知道。并且非常感谢您的注意。真的是我的坏,我没有注意到。再次感谢 – user2999165

+0

欢迎您,与您的项目好运,其他用户也给了很好的提示,特别是user2864740 =) – Zagen

+0

谢谢。我尝试使用'window.onbeforeunload =函数(){ 删除localStorage ['data']; };'什么发生是,当你访问文件夹,你会看到着陆页,然后当你刷新它们唯一的时间将它重定向到登录页面。你能帮我弄清楚我在这里做错了什么吗?谢谢 – user2999165

-1

只需将值设置为nullundefined

您还可以使用:

delete localStorage.data //or 
localStorage.removeItem("data") 
+1

这似乎是可能的 – 2014-02-21 23:57:46

+1

嗨感谢您的帮助。我试了两个。但是发生什么事是,当你访问文件夹时,你会看到目标页面,然后当你刷新它时,唯一的一次它会将你重定向到登录页面。你能帮我找出为什么会发生这种情况吗?谢谢 – user2999165

+0

我很感激,如果downvoter可以发表评论,并让我知道答案有什么问题! – advncd

-2

正确的方式来处理本地存储是使用Storage API,其中包括setItem,getItemremoveItem的方法 - 这样做instea直接财产访问的d。使用API​​可以在本地存储器垫片上的各个浏览器(如果支持的话)上可靠地工作

(下面显示了API的工作;如果有错误,要注意准确什么它说。)

localStorage.clear();    // reset for examples 

localStorage.setItem("data", "hi!") 
localStorage.length     // -> 1 
localStorage.getItem("data")   // -> "hi!" 

localStorage.setItem("data", null) // set value to null 
localStorage.length     // -> 1 (key NOT removed!) 
localStorage.getItem("data")   // -> null 

localStorage.removeItem("data")  // remove key 
localStorage.length     // -> 0 (key really WAS removed!) 
localStorage.getItem("data")   // -> null 

另一个原因使用上述API是localStorage.setItem("getItem", "foo")不会打破下一个使用localStorage.getItem作为存储键/值对和存储对象属性保持明显不同。


在浏览器(和或许其他地方),该delete操作者,这从正常JavaScript对象中删除属性, “工程”。我做不是出于各种原因推荐或使用这种速记。

  1. 它不是讨论/由W3C API在所有
  2. 它混淆的JS特性和底层模型所定义;考虑localStorage['getItem']和变型,上述
  3. 所讨论它不能和不工作了垫片

例,在任何情况下:如果你想删除

localStorage["data"] = "hi!" 
localStorage.getItem("data")  // -> "hi!" 
localStorage["data"]    // -> "hi!" 
localStorage.hasOwnProperty["data"] // -> true (exposed property in Chrome) 

delete localStorage["data"] 
localStorage.getItem("data")  // -> null 
localStorage["data"]    // -> undefined 
localStorage.hasOwnProperty["data"] // -> false (property is gone) 

Deleting from localStorage: should I use delete or .removeItem?

+0

非常感谢你向我解释。我曾尝试给它一个对象,因为我希望它检查用户是否登录并重定向页面如果不是。我会尝试你的答案,并让你知道发生了什么。非常感谢 – user2999165

+0

嗨如果我想检查是否从登录页面设置了密钥,该怎么办。我在登录时使用了'localStorage ['data1b'] = JSON.stringify({logedIn:0})',这个'localStorage ['data'] = JSON.stringify({folder1:{logedIn:1},folder2:{ logedIn:0},folder3:{logedIn:1}});'在索引上。我如何使用你的答案做出这样的事情?thansk寻求进一步的帮助。 – user2999165

1

您在本地存储中保存的特定项目,您可以这样做:

localStorage.setItem("key", "value"); // Set a value with a "key" 
localStorage.getItem("key"); // Get the value associated with "key" 
localStorage.removeItem("key"); // Remove value associated with "key" 

您也可以清除所有localStorage。这是通过以下方式完成的:

localStorage.clear(); 

然后您将清除localStorange中的所有数据。

你可以用sessionStorage做同样的事情。使用相同的方法。

+1

虽然这里有一个问题,但如果你在调用'localStorage.clear()'' – amitamb

+0

“前请指定localStorage [”clear“],所以只需调用'localStorage.removeItem(”clear“)'谢谢各位回答。 amitab,所以如果我有'localSotrage ['data']'那么我需要'localStorage.removwItem(“data”)'然后'localStorage.clear()'?我会尝试它,让你知道 – user2999165

相关问题