2012-02-28 2 views
0

У меня есть текстовое поле. Я бы подсчитал строки моего ввода.Javascript/Jquery get num row from string

Моя простая функция countLines работает со всеми другими регулярными выражениями, но не в этом случае.

function countLines(str){ 
    return (str.split("\r\n|\r|\n").length -1); 
} 

alert(countLines($("#myTextArea").html()); 

Почему его возвращение равно 0, даже если у меня есть несколько строк текста?

ответ

1

Вы, вероятно, хотите форму регулярного выражения.

function countLines(str){ 
    return (str.split(/\r?\n|\r/).length); 
} 
2

Вы передаете строку .split() вместо регулярного выражения. Используйте слэши (не кавычки), чтобы разграничить ваше регулярное выражение: /\r\n|\r|\n/.

function countLines(str){ 
    return (str.split(/\r\n|\r|\n/).length -1); 
} 

Но вычитание 1 из длины будет правильным, если ваше текстовое поле пуст. В случае, если ваш текстовое поле содержит:

 
line 1 
line 2 

Там будет только один \n. Вызов .split() вернет массив из двух элементов, и countLines() вернет 1, когда на самом деле две линии, не так ли?

+1

Обратите внимание, что '.html()' не будет возвращать пользовательский ввод, для этого вы должны использовать '.val()'. Вот простая демонстрация, показывающая разницу между использованием .html() 'и' .val() 'в текстовом поле: http://jsfiddle.net/YZVP6/ – Jasper

+0

Мое текстовое поле используется как редактор html. ;) – Danilo

2

Не используйте сплит. Вот еще лучший способ, так как вы, вероятно, будете работать с элементом DOM. В приведенном ниже примере подсчитываются строки кода в элементе «pre». Замените «pre» для любого желаемого селектора. Наслаждаться.

var count = $('pre').text().match(/\r?\n|\r/mg).length;