Dòng mới trong vùng văn bản


281
<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. Làm thế nào tôi có thể làm điều đó?

Câu trả lời:


523

Hãy thử cái này:

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

&#10;Nguồn cấp dữ liệu và &#13;trả lại vận chuyển là các thực thể HTML wikipedia . Bằng cách này, bạn 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.


2
@LittleAlien 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

2
không &#10;đủ để phân tích \n?
Doug

Nó không phụ thuộc vào Windows so với macOS cho dù cả hai ký tự trả về dòng và vận chuyển trở lại là cần thiết, hoặc thậm chí được phân tích cú pháp phải không?
SeizeTheDay

1
@SeizeTheDay có, nhưng đó không phải là MacOS - đó là Linux / BSD vs Windows
Bakudan

@Bakudan ơi! Tôi nghĩ macOS, dựa trên Unix, vẫn sẽ có vấn đề đó. Nhưng bạn chắc chắn đúng, sự khác biệt là tổng quát hơn.
SeizeTheDay

27

Tôi đã 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 ra một chuỗi có các ký tự dòng mới thực sự trong đó và do đó buộc công cụ xem tạo ra một dòng mới thay vì một 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ào cầ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>

Riders

<textarea>Blah
blah
blah</textarea>

thay thế tất cả:

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 = String.fromCharCode (13, 10); là điều duy nhất làm việc cho tôi trong việc thêm dòng mới theo chương trình trong thời gian chạy. +1 về điều đó.
Ronen Rabinovici

3
Tôi muốn đề xuất 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ế);
Ronen Rabinovici

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

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

This is my statement2</textarea>

Fiddle cho thấy nó hoạt động: http://jsfiddle.net/trott/5vu28/ .

Nếu bạn thực sự muốn điều này nằm trên một dòng trong tệp nguồn, bạn có thể chèn tham chiếu ký tự HTML cho nguồn cấp dữ liệu và trả về vận chuyển như trong câu trả lời từ @Bakudan:

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


21

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

  • &#10;là (giá trị HtmlEncoding của ASCII 10 hoặc) ký tự dòng cấp bằng chữ trong chuỗi HTML . Nhưng ký tự nguồn cấp dữ liệu KHÔNG hiển thị dưới dạng ngắt dòng trong HTML (xem ghi chú ở dưới cùng).

  • \nlà ký tự linefeed bằng chữ (ASCII 10) trong chuỗi Javascript .

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

Hy vọng rằng minh họa sau đây 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 innerHTMLgiá trị của các TEXTAREAyếu tố không làm Html. Hãy thử như sau:<textarea>A <a href='x'>link</a>.</textarea> để xem.
  • Các P tử biểu hiện tất cả các khoảng trắng liền kề (bao gồm các dòng mới) dưới dạng một khoảng trắng.
  • Ký tự LF không kết xuất thành một dòng hoặc ngắt dòng mới trong HTML.
  • Kết TEXTAREAxuất lại là một dòng mới bên trong hộp vùng văn bản.

1
Trên mặt của bài đăng này có vẻ phức tạp, nhưng thực sự chứa rất nhiều thông tin hữu ích. Nếu bạn đang progamatically thêm dòng vào <textarea/>đây thì đây là bài bạn cần!
Morvael

<br/>là những gì tôi đang tìm kiếm
Johnny Five

14

Ngắt nhập dòng Keyword trong Textarea bằng CSS:

white-space: pre-wrap;

1
Điều này nên cao hơn
Rodney Salcedo

đó là phương pháp đơn giản nhất để đạt được kết quả cần thiết, cảm ơn @Suraj
Moaz Ateeq

Đây là câu trả lời
anvd

7

Hãy thử nó .. 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
các thẻ:

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

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

7

Để có được một dòng mới bên trong vùng văn bản, hãy đặt ngắt dòng thực tế ở đó:

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


5

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


5
Chà, một nghĩa đen \nsẽ không hoạt động, nó sẽ cần phải là một dòng mới thực sự .
Greg Hewgill

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

2

Sau rất nhiều bài kiểm tra, đoạn mã sau hoạt động với tôi trong Formscreipt

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

0

.replace()Hàm của tôi sử dụ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ô hình 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"

0

T.innerText = "Vị trí của LF:" + t.value.indexOf ("\ n");

p3.innerText = t.value.replace("\n", "");

<textarea id="t">Line 1&#10;Line 2</textarea>

<p id='p3'></p>

Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và / hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó.
Alex Riabov

-5

chỉ sử dụng <br>
ex:

<textarea>
blablablabla <br> kakakakakak <br> fafafafafaf 
</textarea>

kết quả:
blablablabla
kakakakakak
fafafafafaf

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.