Używam jquery i mam textarea. Kiedy wyślę mój przycisk, powiadomię o każdym tekście oddzielonym znakiem nowej linii. Jak podzielić tekst, gdy pojawia się nowa linia?
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);
przykładowe dane wejściowe:
Hello
There
Wynik, którego chcę, to:
alert(Hello); and
alert(There)
Powinieneś analizować znaki nowej linii niezależnie od platformy (systemu operacyjnego). Ten podział jest uniwersalny w przypadku wyrażeń regularnych. Możesz rozważyć użycie tego:
Na przykład
źródło
Powinno być
przekazujesz dosłowny ciąg do polecenia split, a nie wyrażenie regularne.
źródło
"\n"
i/\n/
są to dwie ZUPEŁNIE różne rzeczy w JS."
= ciąg,/
= wyrażenie regularne."\n"
i/\n/
dopasować te same rzeczy?Ponieważ używasz
textarea
, możesz znaleźć \ n lub \ r (lub \ r \ n) jako znaki końca linii. Sugeruje się więc, co następuje:$('#keywords').val().split(/\r|\n/)
ref: sprawdź, czy łańcuch zawiera podział wiersza
źródło
/\r?\n/
... Myślę, że użycie|
(lub) przeplatałoby puste wyniki dla zakończeń linii CRLF.\r
) . Ostatnim miejscem, w którym były szeroko stosowane, były starożytne wersje Mac OS sprzed prawie 20 lat.Właśnie
var ks = $('#keywords').val().split(/\r\n|\n|\r/);
będzie działać idealnie.
Upewnij się, że
\r\n
jest umieszczony na początku ciągu RegExp , ponieważ zostanie wypróbowany jako pierwszy.źródło
g
końcu wyrażenia regularnego nie jest konieczneNajprostszym i najbezpieczniejszym sposobem podzielenia łańcucha przy użyciu nowych linii, niezależnie od formatu (CRLF, LFCR lub LF), jest usunięcie wszystkich znaków powrotu karetki, a następnie podzielenie na znaki nowego wiersza .
"text".replace(/\r/g, "").split(/\n/);
Gwarantuje to, że gdy masz ciągły nowych linii (czyli
\r\n\r\n
,\n\r\n\r
czy\n\n
) wynik będzie zawsze taki sam.W Twoim przypadku kod wyglądałby tak:
Oto kilka przykładów, które pokazują znaczenie tej metody:
źródło
var ks = $('#keywords').val().split("\n");
wnętrze programu obsługi zdarzeńalert(ks[k])
zamiastalert(k)
Próbny
źródło
Good'ol javascript:
źródło
Problem polega na tym, że podczas inicjalizacji
ks
,value
nie został ustawiony.Musisz pobrać wartość, gdy użytkownik przesyła formularz. Musisz więc zainicjować
ks
wewnętrzną funkcję zwrotnąźródło
Oto przykład z
console.log
zamiastalert()
. Jest wygodniej :)Możesz spróbować tutaj
źródło
źródło