Преобразовать значение строки textareas в массив JavaScript, разделенный новыми строками
У меня есть textarea
, где пользователь может записать до 1000 символов. Мне нужно получить jQuery('#textarea').val()
и создать массив, где каждый элемент является строкой значения textarea
. Это означает:
Это хорошая строка внутри текстового поля.
Это еще одна строка.
(допустим, что эта строка пуста - ее следует игнорировать).
Кто-то оставил более двух новых строк.
Должен быть преобразован в массив JavaScript:
var texts = [];
text[0] = 'This is a nice line inside the textarea.';
text[1] = 'This is another line.';
text[2] = 'Someone left more than 2 new lines above.';
Таким образом, они могут быть легко imploded для querystring (это формат qs, требуемый провайдером):
example.com/process.php?q=["This is a nice line inside the textarea.","This is another line.","Someone left more than 2 new lines above."]
Я пробовал использовать phpjs explode()
и string.split("\n")
, но они не заботятся о дополнительных новых строках (aka линейных ошибок). Любые идеи?
Ответы
Ответ 1
String.prototype.split()
сладка.
var lines = $('#mytextarea').val().split(/\n/);
var texts = [];
for (var i=0; i < lines.length; i++) {
// only push this line if it contains a non whitespace character.
if (/\S/.test(lines[i])) {
texts.push($.trim(lines[i]));
}
}
Обратите внимание, что String.prototype.split
не поддерживается на всех платформах, поэтому jQuery предоставляет $.split()
. Он просто обрезает пробелы вокруг концов строки.
$.trim(" asd \n") // "asd"
Посмотрите здесь: http://jsfiddle.net/p9krF/1/
Ответ 2
Используйте функцию split
:
var arrayOfLines = $("#input").val().split("\n");
Ответ 3
var split = $('#textarea').val().split('\n');
var lines = [];
for (var i = 0; i < split.length; i++)
if (split[i]) lines.push(split[i]);
return lines;
Ответ 4
Попробуйте это
var lines = [];
$.each($('textarea').val().split(/\n/), function(i, line){
if(line && line.length){
lines.push(line);
}
});