149 votes

Comment séparer la nouvelle ligne

J'utilise jQuery et j'ai une zone de texte. Lorsque je soumets par mon bouton, je vais alerter chaque texte séparé par une nouvelle ligne. Comment séparer mon texte lorsqu'il y a une nouvelle ligne ?

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

exemple d'entrée :

Hello
There

Le résultat que je souhaite est :

alert(Hello); and
alert(There)

205voto

Adi Azarya Points 678

Vous devez analyser les nouvelles lignes quelle que soit la plate-forme (système d'exploitation) Cette division est universelle avec les expressions régulières. Vous pouvez envisager de l'utiliser :

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

Par exemple

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

1 votes

AFAIK, cela fonctionne sur Windows et Unix mais pas sur Mac avant Mac OS X.

0 votes

Cela devrait être la réponse acceptée de loin @oknoorap

0 votes

Cela ne fonctionnera pas s'il utilise un retour chariot dans Windows (^M$).

102voto

John Hartsock Points 36565

Essayez d'initialiser le ks dans votre fonction de soumission.

  (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);

3 votes

Alert(k) n'alerte que sur le numéro de séquence, pas sur la valeur. Vous devriez alerter(ks[k])

2 votes

@hblackorby Votre commentaire, bien que pertinent, est en quelque sorte un point muet puisque le problème principal de l'OP était la portée et l'initialisation de sa variable "ks"

64voto

Marc B Points 195501

Il devrait être

yadayada.val.split(/\n/)

vous passez une chaîne littérale à la commande split, pas une expression rationnelle.

5 votes

"\n" y /\n/ sont deux choses ENTIÈREMENT différentes dans la JS. " = chaîne de caractères, / = regex.

27 votes

Oui, mais quelle est la différence effective ? Ne pas "\n" y /\n/ correspondent aux mêmes choses ?

23 votes

Les deux " \n " et / \n / fonctionnera à peu près de la même manière, mais en fonction de la source que vous divisez, quelque chose comme val.split(/[ \r\n ]+/) peut s'avérer plus efficace. Si votre source a " \r\n ", puis en se séparant sur " \n " quitte le " \r " à la fin, ce qui peut poser des problèmes.

36voto

Raptor Points 1996

Puisque vous utilisez textarea , vous pouvez trouver \n o \r (ou \r\n ) pour les sauts de ligne. Il est donc suggéré de procéder comme suit :

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

ref : vérifie si la chaîne contient un saut de ligne

30 votes

Ou, plus précisément, /\r?\n/ ... Je pense que l'utilisation de | (ou) intercalerait des résultats vides pour les fins de ligne CRLF.

0 votes

Vous ne verrez pas de CR uniquement ( \r ) les sauts de ligne n'importe où sur le web moderne. La dernière fois qu'ils ont été largement utilisés, c'était en anciennes versions de Mac OS d'il y a près de 20 ans.

14voto

Jack Ting Points 448

Juste

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

fonctionnera parfaitement.

Assurez-vous que \r\n est placé en tête du RegExp car elle sera essayée en premier.

0 votes

En g à la fin de l'expression rationnelle n'est pas nécessaire

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X