Подтвердить что ты не робот

Как получить количество строк в текстовом поле?

Я хотел бы подсчитать количество строк в текстовом поле, например:

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" независимо от того, сколько строк.

4b9b3361

Ответ 1

Я реализовал линии и методы lineCount в качестве прототипов String:

String.prototype.lines = function() { return this.split(/\r*\n/); }
String.prototype.lineCount = function() { return this.lines().length; }

По-видимому, метод split не будет считать символ возврата каретки и/или символа новой строки в конце строки (или свойство innerText текстового поля) в IE9, но он будет считать это в Chrome 22, что даст разные результаты.

До сих пор я устраивал это, вычитая 1 из подсчета строк, когда браузер отличается от Internet Explorer:

String.prototype.lineCount = function() { return this.lines().length - navigator.userAgent.indexOf("MSIE") != -1); }

Надеюсь, у кого-то есть лучший RegExp или другой обходной путь.

Ответ 2

Проблема с использованием "\n" или "\ r" заключается в том, что она подсчитывает количество возвратов, если у вас есть длинная строка, которую она может обернуть, а затем она не будет считаться новой строкой. Это альтернативный способ получить количество строк - так что это может быть не лучший способ.

Изменить (спасибо alex):

Script

$(document).ready(function(){
 var lht = parseInt($('textarea').css('lineHeight'),10);
 var lines = $('textarea').attr('scrollHeight') / lht;
 console.log(lines);
})

Обновление: здесь гораздо более тщательный ответ: fooobar.com/questions/51507/...

Ответ 3

Если вы просто хотите проверить результаты жесткой линии, это будет работать с кросс-платформой:

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

Ответ 4

пользователь \n вместо \r

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

Ответ 5

Как насчет разделения на "\n" вместо?

Это также будет проблема, когда одна строка завернута в 2 строки в текстовом поле.

Чтобы сделать это точно, вы можете использовать фиксированный шрифт высоты и измерять пиксели. Однако это может быть проблематично.

Ответ 6

Эта функция подсчитывает количество строк, которые имеют текст в текстовом поле:

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;
}

Ответ 7

Нормальным символом новой строки является "\n" . Соглашение о некоторых системах также должно иметь "\ r" заранее, поэтому в этих системах "\ r\n" часто встречается как новая строка. В браузере, если пользователь не намеренно вводит "\ r", копируя его из другого места, новая строка, вероятно, будет выражаться как "\n" . В любом случае расщепление на "\n" будет подсчитывать количество строк.

Ответ 8

Я использовал оригинальный ответ Mottie, но некоторые функции были изменены в JQuery API. Вот рабочая функция для текущего API v3.1.0:

var lht = parseInt($('#textarea').css('lineHeight'),10);
    var lines = $('#textarea').prop('scrollHeight') / lht;
    console.log(lines);

Все отскакивают от ответа Мотти!

Ответ 9

<html>
<head>
<script>
function countLines(theArea){
var theLines = theArea.value.replace((new RegExp(".{"+theArea.cols+"}","g")),"\n").split("\n");
if(theLines[theLines.length-1]=="") theLines.length--;
theArea.form.lineCount.value = theLines.length;
}
</script>
</head>
<body>
<form>
<textarea name="myText" onKeyUp="countLines(this)" cols="10" rows="10">
</textarea>
<br>
Lines:
<input type=text name="lineCount" size="2" value="0">
</form>
</body>
</html>

Ответ 10

Однако это работает, если вам нужно использовать его, потому что он отвечает на вашу проблему.

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

Ответ 11

Ваши анны могут быть выполнены очень простым способом.

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);

Этот код для точных строк, заполненных текстовым полем. и будет работать точно.