Làm cách nào để thêm ngắt dòng vào văn bản HTML?


156

Tôi đang chỉnh sửa <textarea>bằng JavaScript. Vấn đề là khi tôi thực hiện ngắt dòng trong đó, chúng sẽ không hiển thị. Tôi có thể làm cái này như thế nào?

Tôi nhận được giá trị để viết một hàm, nhưng nó sẽ không ngắt dòng.


Bản demo Codepen với regex và <pre></pre>các giải pháp được trình bày ở đây: codepen.io/a-guerrero/pen/grgVBo
a.guerrero.g87

Câu trả lời:


265

Vấn đề xuất phát từ thực tế là ngắt dòng ( \n\r?) Không giống với <br/>thẻ HTML

var text = document.forms[0].txt.value;
text = text.replace(/\r?\n/g, '<br />');

CẬP NHẬT

Vì nhiều ý kiến ​​và kinh nghiệm của riêng tôi đã cho tôi thấy rằng <br> giải pháp này không hoạt động như mong đợi, đây là một ví dụ về cách nối một dòng mới vào textareasử dụng '\ r \ n'

function log(text) {
    var txtArea ;

    txtArea = document.getElementById("txtDebug") ;
    txtArea.value +=  text + '\r\n';
}

Tôi quyết định thực hiện chỉnh sửa này, và không phải là một câu hỏi mới bởi vì đây là một câu trả lời quá phổ biến là sai hoặc không đầy đủ.


7
Điều này làm việc cho tôi quá. Trong jQuery, bạn có thể làm một cái gì đó như thế này: $ ('# caption'). Html ($ ('# caption'). Text (). Thay thế (/ \ n \ r? / G, '<br />')) ;
DavGarcia

2
/(\r\n|\n|\r)/gm Ngắt dòng Regapi
tothemario

3
Regex đúng là /\r\n?|\n/gkhông có bắt, không có multiline.
aMarCruz

5
Nghi ngờ <br>là sai. Đối với một ngắt dòng phổ quát trong một textarea bạn muốn \r\n. Ví dụ: Trình duyệt UC bỏ qua <br> và \ n trong textareas. Xem Thêm ngắt dòng trong vùng văn bản HTML .
Bob Stein

2
Sử dụng <br> bên trong textarea không hoạt động. Ít nhất là không có trong Chrome, nơi tôi đã thử nghiệm. Sử dụng \ n dường như hoạt động mặc dù. Sử dụng <br> nếu bạn có ý định chèn văn bản dưới dạng html thuần túy, tức là bên ngoài bất kỳ yếu tố đầu vào nào.
Snorvarg

24

nếu bạn sử dụng tập lệnh java chung và bạn cần gán chuỗi cho giá trị vùng văn bản thì

 document.getElementById("textareaid").value='texthere\\\ntexttext'.

bạn cần thay thế \nhoặc < br >để\\\n

nếu không, nó cung cấp cho Uncaught SyntaxError: Unexpected token ILLEGALtất cả các trình duyệt.


18

Có lẽ ai đó thấy điều này hữu ích:

Tôi gặp vấn đề với ngắt dòng được truyền từ biến máy chủ sang biến javascript và sau đó javascript đã viết chúng vào textarea (sử dụng các ràng buộc giá trị của knockout.js).

giải pháp là gấp đôi thoát khỏi dòng mới:

orginal.Replace("\r\n", "\\r\\n")

về phía máy chủ, bởi vì chỉ có một đoạn mã thoát, javascript không phân tích cú pháp.


sử dụng "\\ n" hoạt động với tôi trong Windows và tôi cho rằng nó sẽ hoạt động tốt trong các hệ thống Linux.
Samih A


6

Nếu bạn muốn hiển thị văn bản trong trang của riêng bạn, bạn có thể sử dụng <pre>thẻ.

document.querySelector('textarea').addEventListener('keyup', function() {
  document.querySelector('pre').innerText = this.value;
});
<textarea placeholder="type text here"></textarea>
<pre style="font-family: inherits">
The
new lines will
be respected
      and spaces too
</pre>


3

Một dòng mới chỉ là khoảng trắng cho trình duyệt và sẽ không được đối xử khác với không gian bình thường (""). Để có được một dòng mới, bạn phải chèn <BR />các yếu tố.

Một nỗ lực khác để giải quyết vấn đề: Nhập văn bản vào vùng văn bản và sau đó thêm một số JavaScript phía sau nút để chuyển đổi các ký tự vô hình thành thứ gì đó có thể đọc được và chuyển kết quả sang a DIV. Điều đó sẽ cho bạn biết trình duyệt của bạn muốn gì.


3

Tôi có một textarea với id là #infoartist theo:

<textarea id="infoartist" ng-show="dForm" style="width: 100%;" placeholder="Tell your contacts and collectors about yourself."></textarea>

Trong mã javascript, tôi sẽ nhận được giá trị của textarea và thay thế thoát dòng mới (\ n \ r) bằng <br />thẻ, chẳng hạn như:

var text = document.getElementById("infoartist").value;
text = text.replace(/\r?\n/g, '<br />');

Vì vậy, nếu bạn đang sử dụng jquery (như tôi):

var text = $("#infoartist").val();
text = text.replace(/\r?\n/g, '<br />');

Hy vọng nó sẽ giúp bạn. :-)


0

Nếu bạn chỉ cần gửi giá trị của testarea đến máy chủ có ngắt dòng, hãy sử dụng nl2br


0

đây là điều tôi đã làm cho cùng một rắc rối tôi đã có.

Khi tôi chuyển văn bản đến trang tiếp theo trong jsp, tôi đang đọc nó dưới dạng văn bản thay vì đọc một cái gì đó như

Vì vậy, đầu ra đến như bạn muốn. và đối với các thuộc tính khác, bạn có thể sử dụng như dưới đây.

<textarea style="background-color: white; border: none; width:660px;font-family: Arial, Helvetica, sans-serif; font-size:1.0em; resize:none;" name="text" cols="75" rows="15" readonly="readonly" ><s:property value="%{text}"/></textarea>
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.