2017-02-22 53 views
0

我想从HTML输出中的引用中删除一个选定的子项。Firebase从js循环中删除一个关键(web)

关键是聊天消息或帖子。

现在我想,用户可以用按钮删除选定的消息/帖子。

我可以删除所有,但不是完全选定的孩子。

结果和内容来自“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

你的问题很混乱,请你澄清一下。还要删除与该问题无关的代码。 – MarksCode

+0

对不起。我真的很想理解你的代码,但不知道它应该如何工作。用'for in'迭代快照的孩子是**高度可疑的。更常见的模式是使用'snapshot.forEach(function(child){...')进行迭代。您的问题的解决方案分两步:* 1)*将帖子的关键字添加到您生成的HTML那个帖子,* 2)*当用户点击按钮然后删除正确的孩子时,读回密钥。 –

+0

好吧,“可疑”:),它适用于我,但我认为你是对的,我会采取snapshot.forEach。但是为什么在迭代循环/重复中删除当前的键是没有问题的?无需设置并获取当前的关键值。我想保持简单/更少,但是当它不可能时,我设置并读回密钥。感谢你的可能性! – MikeCaine

回答

0

有一些事情可以做。首先,好像你将有iddeleteThis多个按钮,当每个id应该是唯一的。相反,您可能需要将点击处理程序添加到.delete。其次,正如别人提到的那样,您应该使用snapshot.forEach来遍历孩子。最后,当你创建的按钮,你可以添加后的密钥作为数据属性:

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

然后在点击处理程序,您可以使用该密钥来针对特定的帖子:

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

THX ---我会在稍后尝试,在任何情况下听起来都不错!非常感谢!!! – MikeCaine

+0

IT WORK'SS - ZZ - TOP !!!! THX很多Adrice&Frank!完美:) :))ps(forEach和datakey方法的第二种方式,我非常感谢你! – MikeCaine