如何限制定期向其添加消息的DIV中的文本数量?
How can I limit the amount of text in a DIV that I periodically add messages to?
我有一个基于web的程序,定期从服务器(与Node.js和socket.io)接收一行文本消息,我附加到滚动的div。消息是简单的文本;例如,"Input switch failed"。
socket.on('statusMessage', function (newMessage) {
$('#statusMessageDiv').append(newMessage + "<br>");
});
如何在新消息出现时删除旧消息,以便将显示的消息限制在最近200条左右?
将消息包裹在元素中,计算元素个数,如果超过200个,则删除最后添加的(第一个):
socket.on('statusMessage', function (data) {
$('<p />', {text : newMessage}).appendTo('#statusMessageDiv');
if ( $('p', '#statusMessageDiv').length > 200 )
$('p', '#statusMessageDiv').first().remove();
});
$("#statusMessageDiv span:gt(200)").remove()
(可能是199作为从零开始!)
假设statusMessageDiv包含<span>
标签。这是假设最老的在一堆的底部。
基本原理示例:http://jsfiddle.net/9ZKXY/
编辑:更新小提琴删除第一个/最后一个项目:http://jsfiddle.net/9ZKXY/1/
或者您可以使用javascript数组作为包含消息字符串值的数据结构。执行ajax调用以获取新消息,并将JSON结果作为新消息数组。将数据结构数组与JSON结果数组的计数拼接起来,以删除所需的项。然后将新项添加到数据结构数组中。然后使用像KnockoutJS或AngularJS这样的库将Div绑定到数据结构。这样,当您向数据结构中添加和删除新项时,您的呈现div将相应地显示。
如果您需要保留现有的结构,那么您要尝试删除的是带有每个附加行的第一行。"第一行"由两个节点组成——文本节点和br节点。所以我们可以在添加newMessage
时过滤掉这些小提琴
socket.on('statusMessage', function (newMessage) {
var i = 0;
$('#statusMessages').append(newMessage + "<br/>")
.contents()
.filter(function () {
i++;
return i <= 2 ? this : false; // 2 because one text node and one br node
})
.remove();
}); // end on statusMessage
相关文章:
- 当DIV中的文本高亮显示时,如何获得DIV中Span的值?(Javascript)
- 将Div内容复制到文本区域或具有相同字体族样式的文本
- 如何获取滚动DIV中的当前活动文本
- 如果Div包含精确文本,则添加类
- 如何从DIV数组向DIV添加文本
- Div 使用文本水平扩展
- 基本 Jquery - 如果 TD 中存在文本,则使 DIV 可见
- 获取包含单击链接的DIV的文本
- 使其在悬停文本时显示Div
- Div 文本未显示
- 使用没有 ID 和标签名称的 javascript 更改 DIV 文本
- 使用 jQuery 多次更改 DIV 文本
- Javascript/HTML,根据DIV文本更改多个DIV内容.(Codepen)
- 没有p标记的Div文本选择器
- 使用javascript更改DIV文本
- 更改标题等于的DIV文本
- JavaScript/GWT-在页面加载之前更改GWT创建的DIV文本的要求
- 使用JS/JQ单击按钮时更改DIV文本
- ajax - Div 文本不变
- Div文本不更新javascript代码