2016-05-12 12 views
0

私はlocalStorageからIDを取得しようとしていましたが、それを達成できませんでした。 私のlocalStorage内にはeventsが含まれています。削除のために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コーディングを提供します。詳細については、このトピックを参照してください: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); }); 

私はのlocalStorageからアイテムを取得するためにindexDelを使用しているアレイ法のいくつかの種類(と思う)(events )deleteIdは、削除されるためにクリックされたイベントのIDであるcalEvent.idから取得しました。それ以外は、皆さんはそれが何であるかを知っていると思います。しかし、この方法では、indexDelの代わりにresult変数を使用します。上記のコード

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; 

は私が考えるカスタムループを使用している:私はのlocalStorageから

第二の方法は、2回のgetItem場合はこのように気にしません。 indexDelの変数の宣言は、最初のメソッドと同じです。私はリファクタリング方法を使用しようとしていますが、それがどのように行われるのか理解することは難しいようです。変数の配置が間違っているからですか?私の場合には適していないからですか?

注:eventClick関数内のイベントを削除する必要があります。これまでidを取得してidに基づいてカレンダーからイベントを削除しました。しかし、今私の唯一の問題は、削除されたイベントIDを自分のlocalStorage内のIDと突き合わせてアイテムを削除することです。これまでのところIDを取得することは、私のためにはかなり複雑です。

は、私はすでにこのような何かをやったが、まだ動作しません

を更新しました。誰でもここに何が間違っているのか教えていただけますか?それは私に何のエラーも与えていませんが、ただ何もしません。削除することさえできません。 https://jsfiddle.net/v35a2o07/3/

+2

'localStorage'は値を文字列として保存します。操作前に値を 'JSON.parse()'してください。 :) – SimianAngel

+0

あなたはこれらのような意味ですか? https://jsfiddle.net/v35a2o07/ それは働いていません:( 私は可変配置と誤解するかもしれないと思うので、そのような方法に従うのが難しいです。 – AhKing

+0

配列要素を削除するのに 'delete'キーワードを使用してください。 –

答えて

0

気にしないでください。私はそれを把握すると思う:) setItem & stringifyそれを忘れたのでそれはspliceを使用した後です。 ここでiはスプライスように「スプライス()メソッドは、配列から/に項目を削除し、削除されたアイテム(複数可)を返す/加算」w3school http://www.w3schools.com/jsref/jsref_splice.asp

で書いた追加/削除と同じであると仮定することができます私の最終的なコードが与えられたこのフィドルにある

https://jsfiddle.net/v35a2o07/4/

ので、コンセプトは次のとおりです。

1)最初のステップは、あなたがそれを使用することができるようなvar items = JSON.parse(localStorage["events"]);としてあなたのlocalStorageキーを解析する一つの変数を宣言していますループ

2)forループを使用して、私たちが解析するlocalStorageキーに基づいてlocalStorageの長さを決定します。1

3)if文などif(items[i].id == deleteId){

4として、私たちの願いデータとのlocalStorageデータとの比較をチェックするために使用します)これはオプションですが、重要です。比較が正しいかどうかを確認するには、alertまたはconsole.log()を1つ作成し、文字列化します。そうでない場合は、[object、object]のみが表示されるためです。 alert(JSON.stringify(items[i])+"<<<>>>"+deleteId);のようなコーディングも確かめたい場合はとしてください。

5)すべての条件が正しい場合は、何らかのアクションを実行する準備ができています。私の場合は、splice()を使用して削除します。また、アイテムを追加するために使用することもできます。私はどのようにそれが行われているかわからないが、それを検索してより多くの情報を得ることを試みる。

6)スプライシング後、ループから壊れて外れても安全です。

7)これは重要ですが、そうでないと機能しません。それをlocalStorageに戻して文字列にすることを忘れないでください。localStorage.setItem('events', JSON.stringify(items));

これはそれです。 これは、これが必要な人に役立つことを望みます。間違った発言や誤った発想をした場合は、誰にでも訂正し明確にしてください。

乾杯。

関連する問題