2011-11-14 11 views
48

Estoy usando jquery, y tengo un área de texto, así que cuando envíe el botón alertaré cada texto por separado por nueva línea. ¿Cómo dividirse de la nueva línea?Javascript cómo dividir newline

var ks = $('#keywords').val().split("\n"); 
    (function($){ 
    $(document).ready(function(){ 
     $('#data').submit(function(e){ 
      e.preventDefault(); 
      alert(ks[0]); 
      $.each(ks, function(k){ 
       alert(k); 
      }); 
     }); 
    }); 
    })(jQuery); 

ejemplo de entrada:

Hello 
There 

resultado que quiero es:

alert(Hello); and 
alert(There) 

Respuesta

54

Intenta inicializar la variable ks dentro de su función de enviar.

(function($){ 
    $(document).ready(function(){ 
     $('#data').submit(function(e){ 
      var ks = $('#keywords').val().split("\n"); 
      e.preventDefault(); 
      alert(ks[0]); 
      $.each(ks, function(k){ 
       alert(k); 
      }); 
     }); 
    }); 
    })(jQuery); 
+1

alert (k) solo alerta el número de secuencia, no el valor. Debería alertar (ks [k]) – HBlackorby

+2

@hblackorby Su comentario, aunque relevante, es algo así como un punto silenciado ya que el principal problema de OP aquí era el alcance y la inicialización de su variable "ks" –

30

Debe ser

yadayada.val.split(/\n/) 

estás pasando en una cadena literal al comando de división, no una expresión regular.

+6

¿Y qué? ¿Qué hay de malo con "\ n" para dividir? –

+3

'" \ n "' y '/ \ n /' son dos cosas TOTALMENTE diferentes en JS. '" '= string,'/'= regex. –

+21

Sí, pero ¿cuál es la diferencia efectiva? No' "\ n" 'y'/\ n/'coinciden con las mismas cosas? –

3
  1. Mover el var ks = $('#keywords').val().split("\n"); dentro del controlador de eventos
  2. Uso alert(ks[k]) en lugar de alert(k)

(function($){ 
    $(document).ready(function(){ 
     $('#data').submit(function(e){ 
      e.preventDefault(); 
      var ks = $('#keywords').val().split("\n"); 
      alert(ks[0]); 
      $.each(ks, function(k){ 
       alert(ks[k]); 
      }); 
     }); 
    }); 
    })(jQuery); 

Demo

0

El problema es que al inicializar ks, el value no se ha establecido.

Usted necesita recuperar el valor cuando el usuario envía el formulario. Así que hay que inicializar el ks dentro de la función de devolución de llamada

(function($){ 
    $(document).ready(function(){ 
     $('#data').submit(function(e){ 
     //Here it will fetch the value of #keywords 
     var ks = $('#keywords').val().split("\n"); 
     ... 
     }); 
    }); 
})(jQuery); 
0

Good'ol javascript:

var m = "Hello World"; 
var k = m.split(' '); // I have used space, you can use any thing. 
for(i=0;i<k.length;i++) 
    alert(k[i]); 
0

Aquí es ejemplo con console.log en lugar de alert(). Es más conveniente :)

var parse = function(){ 
    var str = $('textarea').val(); 
    var results = str.split("\n"); 
    $.each(results, function(index, element){ 
    console.log(element); 
    }); 
}; 

$(function(){ 
    $('button').on('click', parse); 
}); 

Puede probarlo here

14

dado que está utilizando textarea, es posible que \ no \ r (o \ r \ n) para saltos de línea. Por lo tanto, se sugiere lo siguiente:

$('#keywords').val().split(/\r|\n/)

ref: check whether string contains a line break

+18

o, más específicamente, '/ \ r? \ n /' ... Creo que usar '|' (o) entrelazaría resultados vacíos para terminaciones de línea CRLF. – Dusty

+1

@Dusty ¡Genial! Esta es la correcta. – Turtle

7

Debe analizar nuevas líneas independientemente de la plataforma (sistema operativo) Esta escisión con expresión regular es universal, puede considerar el uso esta.

var ks = $('#keywords').val().split(/\r?\n/); 

E.g.

"a\nb\r\nc\r\nlala".split(/\r?\n/) // ["a", "b", "c", "lala"] 
0

Sólo

var ks = $('#keywords').val().split(/\r\n|\n|\r/g);

funcione a la perfección.

Asegúrese de \r\n se coloca en la delantera de RegExp cadena, porque primero se intentará.