преобразовать значение строки textareas в массив JavaScript, разделенный новыми строками - PullRequest
25 голосов
/ 12 декабря 2011

У меня есть textarea, где пользователь может написать до 1000 символов. Мне нужно получить jQuery('#textarea').val() и создать массив, где каждый элемент представляет собой строку значения textarea. Это значит:

Это хорошая линия внутри текстовой области.
Это еще одна строка.
(предположим, что эта строка пуста - ее следует игнорировать).
Кто-то оставил более 2 новых строк выше.

Должен быть преобразован в массив 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.';

Таким образом, они могут быть легко взорваны для строки запроса (это формат 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"), но они не заботятся о дополнительных новых строках (иначе как разрывы строк). Есть идеи?

Ответы [ 4 ]

33 голосов
/ 12 декабря 2011

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/

5 голосов
/ 12 декабря 2011

Использование split Функция:

var arrayOfLines = $("#input").val().split("\n");
3 голосов
/ 12 декабря 2011
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;
1 голос
/ 12 декабря 2011

Попробуйте это

var lines = [];
$.each($('textarea').val().split(/\n/), function(i, line){
   if(line && line.length){
      lines.push(line);
   }
});
...