2016-05-12 30 views
0

我一直在嘗試從localStorage獲取ID,但無法實現它。 events中的我的localStorage包含如下所示。現在如何從localStorage獲取唯一的ID以進行刪除按鈕

[{"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編碼條件是i迄今爲止嘗試了不同的方法。有關信息,我看看這個主題:localstorage: Get specific localstorage value of which contains many items 但沒有爲我工作。

我沒試過如下編碼:

第1種方法:

$("#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。

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; 

上面的代碼是使用自定義的循環,我認爲:因此,如果從我的GetItem的localStorage 2倍

第二個方法並不介意。 indexDel的變量聲明與第一個方法仍然相同。我嘗試使用重構方法,但對於我來說,它似乎很難理解它是如何完成的。是因爲我的變量位置錯了嗎?還是因爲它不適合我的情況?

注意:我想刪除eventClick函數內部的一個事件,到目前爲止,我沒有檢索到該id,並從基於id的日曆中刪除該事件。然而,我現在唯一的問題是匹配刪除的事件ID與我的localStorage中的ID並刪除該項目。到目前爲止,從我身上獲取身份證非常複雜。

修訂

我已經做了這樣的事情,但仍然不能正常工作。任何人都可以告訴我這裏出了什麼問題?它不會給我任何錯誤,但它什麼都不做。甚至不刪除。 https://jsfiddle.net/v35a2o07/3/

+2

'localStorage'將值存儲爲字符串。在對它們進行操作之前,請務必使用'JSON.parse()'值。 :) – SimianAngel

+0

你的意思是這樣嗎? https://jsfiddle.net/v35a2o07/ 它不工作:( 我想我可能會誤解與變量的位置。這就是爲什麼我很難跟着這樣的方法 – AhKing

+0

使用'delete'關鍵字刪除數組元素。 –

回答

0

沒關係。我想我想通了:) 這是因爲我忘了setItem & stringify它使用後splice。 在這裏,我可以假定拼接相同添加/移除,例如在寫w3school http://www.w3schools.com/jsref/jsref_splice.asp

「拼接()方法增加/刪除從一個數組項/,並返回刪除的項目(或多個)」。

我最後的代碼是在這個小提琴給出:https://jsfiddle.net/v35a2o07/4/

所以概念是:

1)第一步是聲明一個變量,它分析你的localStorage鍵如var items = JSON.parse(localStorage["events"]);,這樣就可以用它來循環

2)使用for循環根據我們解析的localStorage密鑰確定localStorage的長度。1

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));

就是這樣。 我希望這可以幫助任何需要它的人。如果我做出錯誤的陳述或錯誤的概念,請糾正並向任何人澄清。

乾杯。