如何获取textarea中的行数?

IT技术 javascript jquery
2021-01-30 02:24:21

我想要的是计算 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”。

6个回答

使用 "\n" 或 "\r" 的问题是它只计算返回的数量,如果你有一条很长的行,它可以换行,然后它就不会被算作一个新行。这是获取行数的另一种方法 - 所以它可能不是最好的方法。

编辑(感谢亚历克斯):

脚本

$(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

我认为您需要替换attrprop,至少attr对我不起作用,它每次都返回 undefined ......
2021-03-22 02:24:21
@webeno 这取决于您使用的 jQuery 版本。从 jQuery v1.6 开始,您需要使用prop()代替attr()( ref )
2021-04-05 02:24:21
这似乎没有返回正确的行高,您必须设置它。
2021-04-07 02:24:21
此示例不考虑填充。添加填充时,我得到正确的数字:var padding = parseInt($('textarea').css('paddingTop'),10) + parseInt($('textarea').css('paddingBottom'),10) var lines = ($('textarea').prop('scrollHeight') - padding) / lineheight;
2021-04-07 02:24:21
您可以使用 `var lineheight = $('textarea#my-textarea').css('line-height'); 减少维护。
2021-04-09 02:24:21

如果您只是想测试强硬的回报,这将跨平台工作:

var text = $("#myTextArea").val();   
var lines = text.split(/\r|\r\n|\n/);
var count = lines.length;
console.log(count); // Outputs 4
如果您不想在最后计算空行返回,您甚至可以在.trim()之后重.val()$("#myTextArea").val().trim();
2021-03-23 02:24:21

我已经将 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 或其他解决方法。

经过进一步测试,我发现最后一个换行符之后和结束标记之前的任何空格也算作拆分中除 IE9 浏览器之外的额外元素。
2021-03-18 02:24:21
你是如何添加文本的?你什么时候想得到计数?确保在添加初始文本后触发计数......文本有多长?没有特别限制,但理论上 64K 作为限制。此外,请确保您的文本区域中未定义 maxLength 属性。最后,这是处理任何 JavaScript 字符串的纯 JavaScript,碰巧 OP 想要应用于文本区域的值(JavaScript 字符串)。
2021-03-18 02:24:21
这篇文章有点旧,但仅供参考,我想我找到了一个解决方法:使用contenteditable元素而不是文本区域:http : //stackoverflow.com/a/22732344/2037924 ...
2021-03-23 02:24:21
这是无稽之谈。没有空格的长文本行被包裹在一个 textarea 中,这里没有\n拆分。
2021-03-29 02:24:21
当我按回车键时它起作用,但它不适用于出现在几行中的长文本。
2021-04-13 02:24:21

用户\n而不是\r

var text = $("#myTextArea").val();   
var lines = text.split("\n");
var count = lines.length;
console.log(count);

但是,如果您需要使用它,这是可行的,因为它可以响应您的问题

let text = document.getElementById("myTextarea").value;   
let lines = text.split(/\r|\r\n|\n/);
let count = lines.length;
console.log(count);