2011-12-12 11 views
23

Ho un textarea in cui l'utente può scrivere fino a 1000 caratteri. Devo ottenere lo jQuery('#textarea').val() e creare un array in cui ogni elemento è una riga del valore di textarea. Ciò significa:convertire il valore di stringa textareas in array JavaScript separato da nuove righe

Questa è una bella riga all'interno dell'area di testo.
Questa è un'altra linea.
(supponiamo che questa riga sia vuota - dovrebbe essere ignorata).
Qualcuno ha lasciato più di 2 nuove righe sopra.

Dovrebbe essere convertito in un array 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.'; 

questo modo possono essere facilmente imploded per a querystring (questo è il formato qs richiesto dal fornitore):

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

Ho provato entrambi gli approcci phpjs explode() e string.split("\n"), ma non si occupano delle nuove linee in più (ovvero le interruzioni di riga). Qualche idea?

+0

Appena fuori dalla parte superiore della mia testa, forse provare la scissione e quindi nutrire il dividere i bit in un array? –

+0

@AndrewPeacock ho appena aggiornato il post con alcune informazioni. L'ho provato con phpjs explode(), ma non si occupa del problema delle righe aggiuntive (se ce ne sono). – andufo

risposta

29

String.prototype.split() è dolce.

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

noti che String.prototype.split non è supportato su tutte le piattaforme, in modo jQuery fornisce $.split() invece. Semplicemente taglia gli spazi bianchi attorno alle estremità di una stringa.

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

verificarlo qui: http://jsfiddle.net/p9krF/1/

+0

solo una cosa ... è consentita un'immissione in più, due no (2 o più devono essere convertiti in uno solo). qualche idea? – andufo

+0

Questo snippet non lo fa? Se una linea contiene solo spazi bianchi viene ignorata. –

+0

sì, ma potresti avere fino a 1 di questi. questo è utile per la separazione dei paragrafi. – 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

ha funzionato e si prende cura degli spazi extra, grazie! solo una cosa, la "int" dovrebbe essere rimossa;) – andufo

+0

Buona cattura! Grazie, ho aggiornato la risposta. –

4

Uso split funzione:

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

dovrebbe essere '.split (/ \ n /)' – Axel

1

Prova questa

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

Cosa si suppone aggiunga '.each'? Voglio dire, stai iterando su un array, spingendo ogni elemento su un nuovo array e non usando l'array originale. Non sembra molto utile. – pimvdb

+0

Penso che ora abbia dei sensi, vero? – ShankarSangoli

+0

Lo fa :) Sebbene il controllo 'line' non sia necessario; non si ottiene mai "null" o "undefined". – pimvdb

Problemi correlati