如何获得textarea中的行数?
我想要的是计算textarea中的行数,例如:
line 1 line 2 line 3 line 4
最多可以计4行。 基本上按一次输入会转移到下一行
以下代码无效:
var text = $("#myTextArea").val(); var lines = text.split("\r"); var count = lines.length; console.log(count);
无论有多少行,它总是给出’1’。
我已经将lines和lineCount方法实现为String原型:
String.prototype.lines = function() { return this.split(/\r*\n/); } String.prototype.lineCount = function() { return this.lines().length; }
显然,split方法不会在IE9的字符串末尾(或textarea的innerText属性)中计算回车符和/或换行符,但它会在Chrome 22中计算它,产生不同的结果。
到目前为止,我通过在浏览器不是Internet Explorer时从行数中减去1来适应这种情况:
String.prototype.lineCount = function() { return this.lines().length - navigator.userAgent.indexOf("MSIE") != -1); }
希望有人有更好的RegExp或其他解决方法。
使用“\ n”或“\ r \ n”的问题是它只计算返回的数量,如果你有一个很长的行可以换行,那么它就不会被计算为新行。 这是获得行数的另一种方法 – 因此它可能不是最佳方式。
编辑(谢谢亚历克斯):
脚本
$(document).ready(function(){ var lht = parseInt($('textarea').css('lineHeight'),10); var lines = $('textarea').attr('scrollHeight') / lht; console.log(lines); })
更新:这里有一个更彻底的答案: https : //stackoverflow.com/a/1761203/145346
如果您只是想测试硬线返回,这将跨平台工作:
var text = $("#myTextArea").val(); var lines = text.split(/\r|\r\n|\n/); var count = lines.length; console.log(count); // Outputs 4
user \n
而不是\r
\n
var text = $("#myTextArea").val(); var lines = text.split("\n"); var count = lines.length; console.log(count);
那么拆分“\ n”呢?
这也是一个问题,其中一行包裹在textarea中的2行。
要像这样准确地执行此操作,您可以使用固定高度字体并测量像素。 但这可能会有问题。
此函数计算textarea中包含文本的行数:
function countLine(element) { var text = $(element).val(); var lines = text.split("\n"); var count = 0; for (var i = 0; i < lines.length-1; i++) { if (lines[i].trim()!="" && lines[i].trim()!=null) { count += 1; } } return count; }
普通的换行符是“\ n”。 某些系统的惯例是事先也有“\ r”,所以在这些系统中,“\ r \ n”经常被认为是一个新的线。 在浏览器中,除非用户通过从其他地方复制它而故意输入“\ r”,否则换行符可能只表示为“\ n”。 在任何一种情况下,按“\ n”分割将计算行数。
我使用了Mottie的原始答案,但是在JQuery API中更改了一些函数。 以下是当前API v3.1.0的工作函数:
var lht = parseInt($('#textarea').css('lineHeight'),10); var lines = $('#textarea').prop('scrollHeight') / lht; console.log(lines);
所有人都为Mottie的答案而烦恼!
但是,如果您需要使用它,这是有效的,因为它可以解决您的问题
let text = document.getElementById("myTextarea").value; let lines = text.split(/\r|\r\n|\n/); let count = lines.length; console.log(count);
你的ans可以用非常简单的方式完成。
var text = $("#myTextArea").val(); // will remove the blank lines from the text-area text = text.replace(/^\s*[\r\n]/gm, ""); //It will split when new lines enter var lines = text.split(/\r|\r\n|\n/); var count = lines.length; //now you can count thses lines. console.log(count);
此代码用于填写textarea中的确切行。 并肯定会工作。