Javascript 删除子元素

Javascript 删除子元素,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我有一个AJAX聊天应用程序,它不断获取新数据,并以另一个div(.child)的形式将其附加到div(#容器)中。每秒可以插入多个.child,但我只想保留最近的10个。每次下载时,我调用以下函数: function cleanup(){ var current = $('#container'); var allData = current.children(); if(allData.length > 10){

我有一个AJAX聊天应用程序,它不断获取新数据,并以另一个div(.child)的形式将其附加到div(#容器)中。每秒可以插入多个.child,但我只想保留最近的10个。每次下载时,我调用以下函数:

function cleanup(){
        var current = $('#container');
        var allData = current.children();
        if(allData.length > 10){
            for(var i = 0;i<allData.length-10;i++){
                allData[i].remove();
            }
        }   
    }
函数清理(){
当前变量=$(“#容器”);
var allData=current.children();
如果(allData.length>10){
对于(var i=0;i您可以使用
:lt()
选择器来限制目标最后的div(因为:lt选择器基于零索引):

另外,替换内容比添加新内容更好。

您可以使用
:lt()
选择器限制到目标最后一个div(因为:lt选择器基于零索引):


替换内容也比添加新内容更好。

而不是让一些代码添加div,然后使用清理功能清理内容——如果我理解正确的话,这可能会添加一大堆子项,而不仅仅是一个子项——为什么不在内存中有效地设置一个长度为10的队列,并继续推进呢(当你拿到10多件物品时,从后面弹出),然后定期将这些子项放在你的#容器上

通过这种方式,您将始终获得最新的10个元素,但您可以以合理的速率更新容器(从而以合理的速率重新流化可视文档)


这可能是在一段时间内完成的,或者你甚至可以在每次处理一条消息时都这样做——但关键是,你不是在向文档中添加、回流它,然后再从文档中删除。这似乎是解决问题的一种低效方法。

而不是让一些代码添加div,然后用清理函数清理它——这是一种非常有效的方法如果我理解正确的话,你可以添加一大堆孩子,而不仅仅是一个——为什么不在内存中有效地设置一个长度为10的队列,并不断地推进(当你达到10+个项目时,将它们从后面弹出),然后定期将这些孩子放在你的#容器上

通过这种方式,您将始终获得最新的10个元素,但您可以以合理的速率更新容器(从而以合理的速率重新流化可视文档)

这可能需要一定的时间间隔,或者您甚至可以在每次处理消息时都这样做—但问题是,您并不是在向文档中添加、重新加载,然后再从文档中删除。这似乎是解决问题的一种低效方法。

CSS解决方案:

#container:nth-of-type(10) ~ #container {
    display: none;
}
CSS解决方案:

#container:nth-of-type(10) ~ #container {
    display: none;
}

为什么不限制数据访问或限制查询?这是一个聊天系统,因此限制数据会使目的无效。只需执行
clear
fetch
,您是否已经证明了自己(例如通过分析)这个消息删除是问题所在?它没有被病态地调用?如果是的话,这些子函数到底有多复杂?因为这是一个非常快速的操作。子函数只是一个div,其中包含两个div,其中包含文本。实际上,它们非常简单。但是,当我评论函数内部时,所有的g消失了,所以我得出结论,这就是问题所在。为什么不限制数据的进入或限制您的查询?这是一个聊天系统,因此限制数据会使目的无效。只需执行
清除
获取
,那么您是否已经证明了自己(例如通过分析)这个消息删除是问题所在?它没有被病态地调用?如果是的话,这些子函数到底有多复杂?因为这是一个非常快速的操作。子函数只是一个div,其中包含两个div,其中包含文本。实际上,它们非常简单。但是,当我评论函数内部时,所有的g消失了,所以我得出结论,这就是问题所在。新添加的元素不是有一个正递增的索引吗?新添加的元素不是有一个正递增的索引吗?虽然我同意你的观点,但应用程序需要在消息发送后立即接收消息,否则就没有意义。我相信这种方法你仍然可以获得所需的行为。如果你想让聊天信息不可见,为什么不在一开始就设置它们(例如,想象一下,在一瞬间收到1000条信息——用户无论如何都无法足够快地阅读它们)。其想法是聊天信息包含敏感内容,因此在阅读后会被销毁。一个用户在一秒钟内收到的信息不会超过5条。否则我会使用这种方法。虽然我同意你的看法,但应用程序要求在发送信息后立即接收信息,否则就没有意义。我相信这一点如果你想让聊天信息不可见,为什么不先设置它们(例如,想象一下,在一瞬间收到1000条信息——用户无论如何都读不到它们)。其想法是聊天信息包含敏感内容,因此在阅读后会被销毁。一个用户在一秒钟内收到的信息不会超过5条。否则,我会使用这种方法。