2011-11-14 26 views
48

Tôi đang sử dụng jquery, và tôi có một textarea, vì vậy khi tôi gửi nút tôi sẽ cảnh báo mỗi văn bản riêng biệt bằng dòng mới. Làm cách nào để tách khỏi dòng mới?Javascript làm thế nào để tách 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); 

dụ đầu vào:

Hello 
There 

Kết quả tôi muốn là:

alert(Hello); and 
alert(There) 

Trả lời

54

Hãy thử khởi tạo biến ks bên nộp chức năng của bạn.

(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

cảnh báo (k) chỉ cảnh báo số thứ tự, chứ không phải giá trị. Bạn nên cảnh báo (ks [k]) – HBlackorby

+2

@hblackorby Nhận xét của bạn, mặc dù có liên quan, có phần là điểm câm vì vấn đề chính của OP ở đây là phạm vi và khởi tạo biến "ks" –

30

Nó phải là

yadayada.val.split(/\n/) 

bạn đang đi qua trong một chuỗi chữ để lệnh tách, không phải là một regex.

+6

Vì vậy, cái gì? Có gì sai với "\ n" để chia nhỏ? –

+3

'" \ n "' và '/ \ n /' là hai thứ HOÀN THÀNH khác nhau trong JS. '' '= string,'/'= regex. –

+21

Vâng, nhưng sự khác biệt hiệu quả là gì? Không' "\ n" 'và'/\ n/'khớp với cùng một thứ? –

3
  1. Di chuyển var ks = $('#keywords').val().split("\n"); bên trong xử lý sự kiện
  2. Sử dụng alert(ks[k]) thay vì 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

Vấn đề là khi bạn khởi ks, các value chưa được thiết lập.

Bạn cần tìm nạp giá trị khi người dùng gửi biểu mẫu. Vì vậy, bạn cần phải khởi tạo ks bên trong hàm callback

(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

Dưới đây là ví dụ với console.log thay vì alert(). Đó là thuận tiện hơn :)

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

Bạn có thể thử nó here

14

Vì bạn đang sử dụng textarea, bạn có thể tìm thấy \ n hoặc \ r (hoặc \ r \ n) cho ngắt dòng. Vì vậy, sau đây là gợi ý:

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

ref: check whether string contains a line break

+18

hoặc, cụ thể hơn, '/ \ r? \ n /' ... Tôi nghĩ sử dụng '|' (hoặc) sẽ xen kẽ các kết quả rỗng cho các kết thúc dòng CRLF – Dusty

+1

@Dusty Tuyệt vời! Đây là kết quả chính xác. – Turtle

7

Bạn nên phân tích dòng mới không phụ thuộc vào nền tảng (hệ điều hành) chia này với biểu thức chính quy là phổ biến, bạn có thể xem xét sử dụng điều này.

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

Ví dụ:

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

Chỉ

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

sẽ làm việc một cách hoàn hảo.

Hãy chắc chắn \r\n được đặt ở đầu của chuỗi RegExp, vì nó sẽ được thử trước.

Các vấn đề liên quan