27

I have a textarea where the user can write up to 1000 characters. I need to get the jQuery('#textarea').val() and create an array where each item is a line of the textarea's value. That means:

This is a nice line inside the textarea.
This is another line.
(let's asume this line is empty - it should be ignored).
Someone left more than 2 new lines above.

Should be converted to a JavaScript array:

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.';

That way they can be easily imploded for to querystring (this is the qs format required by the provider):

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."]

I tried both the phpjs explode() and string.split("\n") approaches but they doesn't take care of the extra new lines (aka line breakes). Any ideas?

Axel
  • 3,331
  • 11
  • 35
  • 58
Andres SK
  • 10,779
  • 25
  • 90
  • 152
  • Just off the top of my head, maybe try splitting it and then feeding the split bits into an array? – ayyp Dec 12 '11 at 18:32
  • @AndrewPeacock i just updated the post with some info. I tried that with phpjs explode(), but it doesn't take care of the extra lines (if any) issue. – Andres SK Dec 12 '11 at 18:33

4 Answers4

35

String.prototype.split() is sweet.

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

Note that String.prototype.split is not supported on all platforms, so jQuery provides $.split() instead. It simply trims whitespace around the ends of a string.

$.trim(" asd  \n") // "asd"

Check it out here: http://jsfiddle.net/p9krF/1/

Alex Wayne
  • 178,991
  • 47
  • 309
  • 337
7

Use split function:

var arrayOfLines = $("#input").val().split("\n");
Abdul Munim
  • 18,869
  • 8
  • 52
  • 61
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;
Phil Klein
  • 7,344
  • 3
  • 30
  • 33
1

Try this

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