2011-12-12 24 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

相關問題