2011-12-25 39 views
191
<textarea cols='60' rows='8'>This is my statement one.\n This is my statement2</textarea> 

<textarea cols='60' rows='8'>This is my statement one.<br/> This is my statement2</textarea> 

Tôi đã thử cả hai nhưng dòng mới không phản ánh trong khi hiển thị tệp html. Tôi có thể làm như thế nào?Dòng mới trong vùng văn bản

Trả lời

381

Hãy thử điều này một:

<textarea cols='60' rows='8'>This is my statement one.&#13;&#10;This is my statement2</textarea> 

&#10; Dòng Thức ăn và &#13; vận chuyển trở lại là HTML entitieswikipedia. Bằng cách này, bạn đang thực sự phân tích cú pháp dòng mới ("\ n") thay vì hiển thị nó dưới dạng văn bản.

+1

Tôi không biết những gì phân tích cú pháp dòng mới thay vì 'hiển thị nó như văn bản' có nghĩa là nhưng nó không có ý nghĩa để tiêm' '. Windows Chrome cũng loại bỏ nó. Khi bạn chia 'textarea.value', bạn làm điều đó bằng ký tự' \ n' và không có bất kỳ '\ r' nào trong giá trị textarea, sự quan tâm của nguồn. –

+0

@LittleAlien https://jsfiddle.net/v0y3xvpx/1/ - câu trả lời dựa trên câu hỏi OP, rõ ràng vấn đề đã được giải quyết – Bakudan

+0

Rõ ràng, bạn đã bỏ lỡ câu hỏi OP. Bạn có thể trả lời một số câu hỏi khác. Câu hỏi này không hỏi về trả lại vận chuyển. Nó hỏi về dòng mới. Vận chuyển trở lại là không cần thiết cho câu hỏi này. Nó cũng luôn luôn không cần thiết vì nó được gỡ bỏ bởi trình duyệt ngay cả khi bạn chỉ định nó trong mã nguồn. –

4

Bạn có thể muốn sử dụng \n thay vì /n.

+4

Vâng, chữ '\ n' sẽ không hoạt động, hoặc sẽ là dòng mới * thực tế *. –

+0

Vâng, tất nhiên rồi. Nhưng tôi (không chính xác?) Giả sử rằng anh ta đã biết điều này. – Zar

20
<textarea cols='60' rows='8'>This is my statement one. 

This is my statement2</textarea> 

Fiddle cho biết nó hoạt động: http://jsfiddle.net/trott/5vu28/.

Nếu bạn thực sự muốn điều này phải được trên một dòng trong tập tin nguồn, bạn có thể chèn các tài liệu tham khảo nhân vật HTML cho một thức ăn đường và trở về vận chuyển như thể hiện trong các câu trả lời từ @Bakudan:

<textarea cols='60' rows='8'>This is my statement one.&#13;&#10;This is my statement2</textarea> 
5

thử này .. nó hoạt động:

<textarea id="test" cols='60' rows='8'>This is my statement one.&#10;This is my statement2</textarea> 

thay thế cho
tags:

$("textarea#test").val(replace($("textarea#test").val(), "<br>", "&#10;"))); 
+3

thực tế $ ("textarea # test"). Val() .thay thế (/ \ n/g, " "); (điều này sẽ thay thế tất cả các lần xuất hiện của dòng mới) – Symba

7

Để có được một dòng mới bên trong textarea, chấm linebreak thực tế đó:

<textarea cols='60' rows='8'>This is my statement one. 
This is my statement2</textarea> 
17

tôi đã tìm thấy String.fromCharCode(13, 10) hữu ích khi sử dụng công cụ xem. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

Điều này tạo chuỗi có ký tự dòng mới thực sự trong đó và do đó buộc công cụ xem xuất ra dòng mới chứ không phải phiên bản thoát. Ví dụ: Sử dụng công cụ xem NodeJS EJS - Đây là một ví dụ đơn giản, trong đó bất kỳ \ n nên được thay thế:

viewHelper.js

exports.replaceNewline = function(input) { 
    var newline = String.fromCharCode(13, 10); 
    return input.replaceAll('\\n', newline); 
} 

EJS

<textarea><%- viewHelper.replaceNewline("Blah\nblah\nblah") %></textarea> 

Renders

<textarea>Blah 
blah 
blah</textarea> 

replaceAll:

String.prototype.replaceAll = function (find, replace) { 
    var result = this; 
    do { 
     var split = result.split(find); 
     result = split.join(replace); 
    } while (split.length > 1); 
    return result; 
}; 
+1

Dòng mới = Chuỗi.fromCharCode (13, 10); là điều duy nhất làm việc cho tôi khi thêm dòng mới theo chương trình trong suốt thời gian chạy. +1 về điều đó. –

+3

Tôi muốn gợi ý có lẽ một cách đơn giản hơn để thay thế tất cả: var regExp = new RegExp (find, "gi"); str = str.replace (regExp, thay thế); –

+2

Tôi đã làm 's = s.replace (/ \\ n/g, String.fromCharCode (13, 10))'. Đây là phép thuật. Cảm ơn bạn. – Glycerine

2

Sau nhiều thử nghiệm, sau đang làm việc cho tôi trong Typescreipt

export function ReplaceNewline(input: string) { 
    var newline = String.fromCharCode(13, 10); 
    return ReplaceAll(input, "<br>", newline.toString()); 
} 
export function ReplaceAll(str, find, replace) { 
    return str.replace(new RegExp(find, 'g'), replace); 
} 
2

Tôi nghĩ rằng bạn đang bối rối cú pháp của ngôn ngữ khác nhau.

  • &#10; là (giá trị HtmlEncoded của ASCII 10 hoặc) nhân vật linefeed chữ trong một HTML chuỗi. Nó NOT hiển thị dưới dạng ngắt dòng trong HTML (xem ghi chú ở dưới cùng).

  • \n là ký tự cấp dòng chữ (ASCII 10) trong một chuỗi Javascript.

  • <br/> là ngắt dòng trong HTML. Nhiều yếu tố khác, ví dụ: <p>, <div>, v.v. cũng hiển thị ngắt dòng trừ khi được ghi đè bằng một số kiểu.

Hy vọng rằng sau illustration sẽ làm cho nó rõ ràng hơn:

T.innerText = "Position of LF: " + t.value.indexOf("\n"); 
 

 
p1.innerHTML = t.value; 
 
p2.innerHTML = t.value.replace("\n", "<br/>"); 
 
p3.innerText = t.value.replace("\n", "<br/>");
<textarea id="t">Line 1&#10;Line 2</textarea> 
 

 
<p id='T'></p> 
 
<p id='p1'></p> 
 
<p id='p2'></p> 
 
<p id='p3'></p>

Một vài điểm cần lưu ý về Html:

  • Các VALUE thuộc tính của phần tử TEXTAREA không làm hiển thị Html
  • Phần tử P hiển thị tất cả các khoảng trắng liền kề (bao gồm cả các dòng mới) dưới dạng một dấu cách.
  • Ký tự LF không hiển thị dòng mới hoặc ngắt dòng trong HTML.
  • TEXTAREA hiển thị LF là một dòng mới.
0

Nếu bạn đang nói về việc sử dụng giá trị của vùng văn bản ở một nơi khác trên trang của bạn và hiển thị dòng mới, tôi đã tìm thấy css propperty không gian trắng: được bọc trước; hoạt động rất tốt và đó là giải pháp đơn giản. Có lẽ điều này giúp một ai đó.

0

Chức năng .replace() của tôi bằng các mẫu được mô tả trên các câu trả lời khác không hoạt động. Mẫu làm việc cho trường hợp của tôi là:

var str = "Test\n\n\Test\n\Test"; 
str.replace(/\r\n|\r|\n/g,'&#13;&#10;'); 

// str: "Test&#13;&#10;&#13;&#10;Test&#13;&#10;Test" 
Các vấn đề liên quan