2016-03-01 82 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對象是返回一個對象的函數。這使得有可能跟蹤線條而不將它暴露給世界其他地方。