2016-03-01 57 views
-2

我正在为网页创建一个textarea元素,该元素将按用户的指示显示某些输出。如何仅显示最后100行

例如

var Logger = { 
    log: function (line) { 
     $('logTextArea').append(line + '\n); 
    } 
} 

有没有一种简单的方法,当我做追加到只保留最后100个条目消除休息吗?

+3

在'\ n'和['slice']上合并['split'ing](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/split) (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice)来获得最后100个。或者你可以['shift'](https://开发者。 mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/shift)是“split”数组中的第一个。 –

+0

当用户提交它时(从最后一个条目开始并开始移动),您可以按照追加它们的方式(用“\ n”)查找新行,然后执行递归循环。 –

+0

请更具体地了解此UI如何工作。 *“用户指示”*无意义 – charlietfl

回答

1

您需要拆分新行并切断最后100行。为了缩短演示,我从最后使用了5行。

function addTime() { 
 
    var ts = new Date().toLocaleString(); 
 
    var textarea = document.querySelector("#x"); 
 
    var txt = textarea.value.length ? textarea.value.split(/\n/g) : []; 
 
    txt.push(ts); 
 
    textarea.value = txt.slice(-5).join("\n"); 
 
} 
 

 
window.setInterval(addTime, 1000);
<textarea id="x" rows="10"></textarea>

3

我建议只是保持线的阵列,并且只推新线到其上,和移位线断。然后只需使用join转换为一个字符串并将您的textarea设置为该值。

var Logger = function() { 
 
    var lines = []; 
 
    return { 
 
    log: function(line) { 
 
     if (lines.length > 100) { 
 
     lines.shift(); // remove the first line 
 
     } 
 
     lines.push(line); // add the new one 
 
     $('#logTextArea').val(lines.join('\n')); 
 
    } 
 
    }; 
 
}; 
 
var logger = new Logger(); 
 
for (var x = 0; x < 110; x++) { 
 
    logger.log(x.toString()); 
 
}
textarea { 
 
    width: 300px; 
 
    height: 200px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<textarea id="logTextArea"></textarea>

请注意,我已经更新了你的Logger对象是返回一个对象的函数。这使得有可能跟踪线条而不将它暴露给世界其他地方。