我想要的是计算 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”。
我想要的是计算 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”。
使用 "\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
如果您只是想测试强硬的回报,这将跨平台工作:
var text = $("#myTextArea").val();
var lines = text.split(/\r|\r\n|\n/);
var count = lines.length;
console.log(count); // Outputs 4
我已经将 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
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);