2011-12-12 23 views
23

我有一个textarea,用户最多可以写入1000个字符。我需要获得jQuery('#textarea').val()并创建一个数组,其中每个项目是textarea值的一行。这意味着:将textareas字符串值转换为由新行分隔的JavaScript数组

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

这样,他们可以很容易地imploded用于向查询字符串(这是由提供者所需要的适量的格式):

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")的方法,但他们没有照顾额外的新线(又名换行符)。有任何想法吗?

+0

只是把我的头顶部,也许尝试拆分它然后喂养拆分成一个数组? –

+0

@AndrewPeacock我刚更新了一些信息的帖子。我试过用phpjs explode(),但它没有照顾额外的行(如果有的话)的问题。 – andufo

回答

29

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/

+0

只是一件事......一个额外的输入是允许的,两个不是(2个或更多应该被转换为一个)。有任何想法吗? – andufo

+0

这段代码不是这样吗?如果一行只包含空格,它将被忽略。 –

+0

是的,但你可能有多达1个。这对于段落分离是很方便的。 – andufo

2
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; 
+0

工作和照顾多余的空间,谢谢!只是一件事,“int”应该被删除;) – andufo

+0

好抓!谢谢,我已经更新了答案。 –

4

使用split功能:

var arrayOfLines = $("#input").val().split("\n"); 
+0

应该是'.split(/ \ n /)' – Axel

1

试试这个

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

什么是'.each'应该添加?我的意思是,你迭代一个数组,将每个元素推到一个新数组中,而不是使用原始数组。它看起来不太有用。 – pimvdb

+0

我认为现在它使感官,不是吗? – ShankarSangoli

+0

它确实:)虽然'线路'检查是没有必要的;你永远不会得到'null'或'undefined'。 – pimvdb

相关问题