2011-12-12 48 views
23

Tôi có một số textarea nơi người dùng có thể ghi tối đa 1000 ký tự. Tôi cần lấy số jQuery('#textarea').val() và tạo một mảng trong đó mỗi mục là một dòng của giá trị textarea. Điều đó có nghĩa là:chuyển đổi giá trị chuỗi văn bản thành mảng JavaScript được phân tách bằng các dòng mới

Đây là dòng chữ đẹp bên trong vùng văn bản.
Đây là một dòng khác.
(giả sử dòng này trống - nó sẽ bị bỏ qua).
Một người nào đó đã để lại hơn 2 dòng mới ở trên.

nên được chuyển đổi sang một mảng 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.'; 

Bằng cách đó họ có thể dễ dàng imploded cho đến chuỗi truy vấn (đây là định dạng qs theo yêu cầu của nhà cung cấp):

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

Tôi đã thử cả hai phương pháp tiếp cận phpjs explode()string.split("\n") nhưng chúng không quan tâm đến các dòng mới bổ sung (còn gọi là ngắt dòng). Bất kỳ ý tưởng?

+0

Chỉ cần ra khỏi đỉnh đầu của tôi, có lẽ cố gắng tách và sau đó cho ăn chia bit thành một mảng? –

+0

@AndrewPeacock tôi vừa cập nhật bài đăng với một số thông tin. Tôi đã thử rằng với phpjs phát nổ(), nhưng nó không chăm sóc của các dòng phụ (nếu có) vấn đề. – andufo

Trả lời

29

String.prototype.split() rất ngọt.

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

Lưu ý rằng String.prototype.split không được hỗ trợ trên tất cả nền tảng, do đó, jQuery cung cấp $.split() thay thế. Nó chỉ đơn giản là cắt khoảng trắng xung quanh các đầu của một chuỗi.

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

Kiểm tra nó ra ở đây: http://jsfiddle.net/p9krF/1/

+0

chỉ một điều ... một lần nhập bổ sung được cho phép, hai lần không phải là (2 hoặc nhiều hơn nên được chuyển đổi thành một). bất kỳ ý tưởng? – andufo

+0

Đoạn mã này có hoạt động không? Nếu một dòng chỉ chứa khoảng trắng nó bị bỏ qua. –

+0

có, nhưng bạn có thể có tối đa 1 trong số đó. điều này rất thuận tiện cho việc tách đoạn. – 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

đã hoạt động và chăm sóc thêm không gian, cảm ơn! chỉ cần một điều, "int" nên được loại bỏ;) – andufo

+0

Tốt bắt! Cảm ơn, tôi đã cập nhật câu trả lời. –

4

Sử dụng split chức năng:

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

phải là '.split (/ \ n /)' – Axel

1

Hãy thử điều này

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

'.each' phải thêm gì? Ý tôi là, bạn đang lặp qua một mảng, đẩy từng phần tử vào một mảng mới và không sử dụng mảng ban đầu. Nó trông không hữu ích lắm. – pimvdb

+0

Tôi nghĩ bây giờ nó có ý nghĩa, phải không? – ShankarSangoli

+0

Nó không :) Mặc dù kiểm tra 'dòng' là không cần thiết; bạn không bao giờ nhận được 'null' hoặc' undefined'. – pimvdb

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