2017-02-22 2 views
0

HTML出力内の参照からボタンを使って選択した子を削除します。Firebaseはjsループ(ウェブ)内のrefからキーを削除します

キーはチャットメッセージまたは投稿です。

これで、ユーザーはボタンで選択したメッセージ/投稿を削除できるようになりました。

選択した子をすべて削除できますが、正確に削除することはできません。

結果と内容は "for in"ループから得られます。

AngularとAngularFireで選択(子)を削除することは問題ありませんが、角度を付けずに削除したいです。

// get ref 
var dbRef = firebase.database().ref().child("user/chat"); 

// child added 
dbRef.on("child_added", function(snapshot) { 
var newPost = snapshot.val(); 

// Loop/Results 

for(var prop in newPost){ 
var xxx = "<li> 
<p>"+newPost.content+"</p> 
<button class='delete' id='deleteThis'> X </button> 
</li>"; 
$(xxx).appendTo("#ul-result");  
} 

// delete Post with button from above 

$('#deleteThis').on('click', function(){ 
// delete all posts --- work 
// dbRef.remove(); 

// delete only this post --- ? 
dbRef.child('?').remove(); 

}); 
}); 
}); 

screenshot

+0

<button class='delete' data-key='" + newPost.key + "'> X </button> 

を次に、あなたのクリックハンドラでは、その特定のポストをターゲットに、そのキーを使用することができますあなたの質問はかなり混乱しています。また、質問と関係のないコードを削除してください。 – MarksCode

+0

申し訳ありません。私は本当にあなたのコードを理解しようとしていますが、どのように動作するのか分かりません。スナップショットの子を「for」で反復することは、**非常に疑わしい**です。より一般的なパターンは、 'snapshot.forEach(function(child){...')で反復することです。あなたの質問に対する解決策は2段階にあります:* 1)*生成するHTMLに投稿のキーを追加しますその投稿、* 2)*ユーザーがボタンをクリックして正しい子供を削除したときにキーを読み返します。 –

+0

Ok、 "疑わしい" :)、それは私のために働くが、私はあなたが正しいと思う、私はスナップショットを取るだろう。しかし、反復ループ/繰り返しで角を持つ現在のキーを削除するのはなぜ問題なのですか?設定せずに現在のキー値を取得します。私はそれをシンプルにしたい、またはそれ以下にしておきたいが、それが不可能なときは私はキーをセットして読み返す。その可能性をありがとう! – MikeCaine

答えて

0

あなたができることがいくつかあります。まず、idが複数のボタンを持つようになり、idが一意でなければならない場合はdeleteThisというように思えます。代わりに、.deleteにクリックハンドラを追加することができます。第二に、他の誰かが言及したように、snapshot.forEachを使って子を反復する必要があります。あなたは、ボタンを作成するときに最後に、あなたは、データの属性としてポストのキーを追加することができます。

$('.delete').on('click', function(){ 
    var id = "user/chat/" + this.dataset.key; 
    firebase.database().ref(id).remove(); 
}); 
+0

THX ---後で試してみます。どうもありがとう!!! – MikeCaine

+0

IT制作 - ZZ - TOP !!!! THXたくさんのアドリッツ&フランク! Perfect::)))ps(forEachとdatakeyメソッドの2番目の方法。私は本当にあなたに感謝しています! – MikeCaine

関連する問題