如何从localStorage获取删除按钮

时间:2016-05-12 14:51:57

标签: javascript jquery fullcalendar local-storage

我一直在尝试从localStorage获取id但无法实现它。 我在events内的localStorage包含如下所示。

[{"id":"ef5","title":"wan","start":"2016-05-12","end":"2016-05-13"},{"id":"ef6","title":"wana","start":"2016-05-21","end":"2016-05-22"},{"id":"ef7","title":"haha","start":"2016-05-25","end":"2016-05-26"},{"id":"ef8","title":"asdas","start":"2016-05-20","end":"2016-05-21"},{"id":"ef9","title":"sdas","start":"2016-05-19","end":"2016-05-20"}]

现在我将使用迄今为止尝试的不同方法提供2个编码。有关信息,请查看此主题:localstorage: Get specific localstorage value of which contains many items 但没有一个对我有用。

我确实尝试过如下编码:

第一种方法:

$("#deleteEventYes").click(function(){
var indexDel = localStorage.getItem("events");
var deleteId = calEvent.id;
var result = localStorage.getItem("events"); 


    function getItemHrefById(json, itemId){ 
    return $(json).filter(function(){return this.id == itemId;})[0].href; 
    } 

    var href = getItemHrefById(result, deleteId);   

    alert(href);   });

上面的代码显示了某种数组方法(我认为),我使用indexDel从localStorage(events)获取项目,而deleteId我从calEvent.id获取,这是有事件的id已被点击以删除。除此之外,我想你们都知道它是什么。但是对于这种方法,我使用result变量而不是indexDel。因此,不介意我从localStorage 2次获取项目

第二种方法:

for (var i = 0 ; i < indexDel.length ; i += 1) {
    if(deleteId == indexDel[i].id) {
    return indexDel[i];
    console.log(deleteId);
    console.log(indexDel[i]);
    }
}
return null;

上面的代码我正在使用自定义循环。 indexDel的变量声明与第一种方法仍然相同。我尝试使用重构方法,但似乎我很难理解它是如何完成的。是因为我的变量放置是错误的吗?还是因为它不适合我的情况?

注意:我想在eventClick函数中删除一个事件,到目前为止我确实检索了id并根​​据id从日历中删除了该事件。但是我现在唯一的问题是将已删除的事件ID与我的localStorage中的id匹配并删除该项。到目前为止,从中获取id对我来说非常复杂。

已更新

我已经做过类似的事情,但仍然无法正常工作。谁能告诉我这里出了什么问题?它没有给我任何错误,但它什么都不做。甚至没有删除。 https://jsfiddle.net/v35a2o07/3/

1 个答案:

答案 0 :(得分:0)

没关系。我想我明白了:) 这是因为我忘了setItem&amp;使用stringifysplice。 在这里我可以假设拼接与添加/删除这样写在w3school相同 http://www.w3schools.com/jsref/jsref_splice.asp

“splice()方法在数组中添加/删除项目,并返回删除的项目。”

我的最终代码是关于这个小提琴:https://jsfiddle.net/v35a2o07/4/

所以概念是:

1)第一步是声明一个解析localStorage密钥的变量,例如var items = JSON.parse(localStorage["events"]);,以便你可以将它用于循环

2)使用for循环根据我们在第1号分析的localStorage键确定localStorage的长度

3)使用if语句检查localStorage数据与我们的期望数据(如if(items[i].id == deleteId){

)之间的比较

4)这是可选的但很重要。为了使您能够检查比较是否正确,请创建一个警报或console.log()并对其进行字符串化,因为如果不这样做,您将只看到[object,object]。编码如alert(JSON.stringify(items[i])+"<<<>>>"+deleteId);如果您想确定,也可以制作一些else statement

5)当所有条件都正确时,你就可以对它做一些动作了。对于我的情况,我只是使用splice()来删除它。它也可以用来添加项目。我不确定它是如何完成的,但尝试搜索它以获得更多信息。

6)拼接后,可以安全地断开并从循环中退出。

7)这很重要,否则它将无效。不要忘记将其设置回localStorage并对其进行字符串化,例如localStorage.setItem('events', JSON.stringify(items));

就是这样。 我希望这能帮助任何需要它的人。如果我做出错误的陈述或错误的概念,请纠正并为任何人澄清。

干杯。