บรรทัดใหม่ในพื้นที่ข้อความ


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>

ฉันลองทั้งคู่ แต่บรรทัดใหม่ไม่ได้สะท้อนขณะทำการเรนเดอร์ไฟล์ html ฉันจะทำสิ่งนั้นได้อย่างไร

คำตอบ:


524

ลองอันนี้:

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

&#10;ฟีดสาย&#13;การบินกลับมาเป็นหน่วยงาน HTMLวิกิพีเดีย วิธีนี้คุณกำลังวิเคราะห์คำในบรรทัดใหม่ ("\ n") แทนที่จะแสดงเป็นข้อความ


2
@LittleAlien jsfiddle.net/v0y3xvpx/1 - คำตอบขึ้นอยู่กับคำถาม OP ปัญหาที่เห็นได้ชัดก็แก้ไขได้
Bakudan

2
ไม่&#10;เพียงพอที่จะแยกวิเคราะห์\n?
Doug

มันไม่ได้ขึ้นอยู่กับ Windows กับ macOS ไม่ว่าจะเป็นทั้งตัวอักษรตัวดึงบรรทัดและการขึ้นบรรทัดใหม่หรือแม้กระทั่งการแจงขวา
SeizeTheDay

1
@SeizeTheDay ใช่ แต่ไม่ใช่ MacOS - เป็น Linux / BSD เทียบกับ Windows
Bakudan

@ Bakudan Oh! ฉันคิดว่า macOS ซึ่งใช้ Unix จะยังคงมีปัญหานี้อยู่ แต่คุณมั่นใจว่าถูกต้องความแตกต่างนั้นกว้างกว่า
SeizeTheDay

28

ฉันพบว่ามีString.fromCharCode(13, 10)ประโยชน์เมื่อใช้เครื่องมือดู https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

สิ่งนี้จะสร้างสตริงที่มีอักขระขึ้นบรรทัดใหม่ตามจริงและบังคับให้วิวเอ็นจินส่งเอาต์พุตขึ้นบรรทัดใหม่แทนที่จะเป็นเวอร์ชันที่ใช้ Escape เช่นการใช้เอ็นจิ้นการดู NodeJS EJS - นี่เป็นตัวอย่างง่ายๆที่ควรเปลี่ยน \ n ใด ๆ :

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>

วาทกรรม

<textarea>Blah
blah
blah</textarea>

แทนที่ทั้งหมด:

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
ขึ้นบรรทัดใหม่ = String.fromCharCode (13, 10); เป็นสิ่งเดียวที่ทำงานสำหรับฉันในการเพิ่มบรรทัดใหม่โดยทางโปรแกรมในช่วงเวลาทำงาน +1 บนนั้น
Ronen Rabinovici

3
ฉันอยากจะแนะนำวิธีที่ง่ายกว่าในการแทนที่ทั้งหมด: var regExp = new RegExp (find, "gi"); STR = str.replace (regexp แทน);
Ronen Rabinovici

2
s = s.replace(/\\n/g, String.fromCharCode(13, 10) )ฉันไม่ นี่คือเวทมนตร์แม้ว่า ขอบคุณ.
กลีเซอรีน

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

This is my statement2</textarea>

แสดงซอว่ามันทำงาน: http://jsfiddle.net/trott/5vu28/

หากคุณต้องการให้สิ่งนี้อยู่ในบรรทัดเดียวในไฟล์ต้นฉบับคุณสามารถแทรกการอ้างอิงอักขระ HTML สำหรับการป้อนบรรทัดและการขึ้นบรรทัดใหม่ตามที่แสดงในคำตอบจาก @Bakudan:

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


22

ฉันคิดว่าคุณสับสนไวยากรณ์ของภาษาที่แตกต่างกัน

  • &#10;คือ (ค่า HtmlEncoded ของ ASCII 10 หรือ) ตัวอักษร linefeed ในสตริงHTML แต่อักขระตัวดึงบรรทัดไม่แสดงเป็นตัวแบ่งบรรทัดใน HTML (ดูหมายเหตุที่ด้านล่าง)

  • \nเป็นตัวอักษร linefeed ตามตัวอักษร (ASCII 10) ในสตริงJavascript

  • <br/>คือตัวแบ่งบรรทัดใน HTML องค์ประกอบอื่น ๆ อีกมากมายเช่น<p>, <div>ฯลฯ นอกจากนี้ยังทำให้การแบ่งบรรทัดเว้นแต่แทนที่ที่มีรูปแบบบาง

หวังว่าภาพประกอบต่อไปนี้จะทำให้ชัดเจนยิ่งขึ้น:

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>

จุดที่ควรทราบเกี่ยวกับ Html:

  • innerHTMLค่าของTEXTAREAองค์ประกอบไม่แสดง Html ลองทำสิ่งต่อไปนี้: <textarea>A <a href='x'>link</a>.</textarea>เพื่อดู
  • Pองค์ประกอบทำให้ทุกช่องว่างสีขาวที่ต่อเนื่องกัน (รวมทั้งสายใหม่) เป็นหนึ่งในพื้นที่
  • อักขระ LF ไม่แสดงผลเป็นบรรทัดใหม่หรือตัวแบ่งบรรทัดใน HTML
  • TEXTAREAทำให้ LF เป็นบรรทัดใหม่เขตพื้นที่ข้อความ

1
บนหน้าของโพสต์นี้ดูเหมือนจะซับซ้อน แต่จริงๆแล้วมีข้อมูลที่เป็นประโยชน์มากมาย หากคุณเพิ่มบรรทัดลงใน progamatically ของคุณ<textarea/>เป็นโพสต์ที่คุณต้องการ!
Morvael

<br/>คือสิ่งที่ฉันกำลังมองหา
จอห์นนี่ห้า

14

หยุดป้อนบรรทัดคำหลักใน Textarea โดยใช้ CSS:

white-space: pre-wrap;

1
ควรสูงกว่านี้
Rodney Salcedo

เป็นวิธีที่ง่ายที่สุดในการบรรลุผลตามที่ต้องการขอบคุณ @Suraj
Moaz Ateeq

นี่คือคำตอบ
anvd

7

ลองนี้ .. มันใช้งานได้:

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

แทนที่
แท็ก:

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

3
มันคือ $ ("textarea # test"). val (). แทนที่ (/ \ n / g, "& # 10;"); (สิ่งนี้จะแทนที่การเกิดขึ้นของบรรทัดใหม่ทั้งหมด)
Claudiu


5

คุณอาจต้องการที่จะใช้แทน\n/n


5
ตัวอักษร\nไม่ทำงานเหมือนกันมันจะต้องเป็นบรรทัดใหม่จริง
Greg Hewgill

ใช่แน่นอน แต่ฉัน (ไม่ถูกต้อง?) สมมติว่าเขารู้เรื่องนี้แล้ว
Zar

2

หลังจากการทดสอบมากมายรหัสต่อไปนี้ใช้ได้กับฉันใน 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);
}

0

.replace()ฟังก์ชั่นของฉันที่ใช้รูปแบบที่อธิบายไว้ในคำตอบอื่น ๆ ไม่ทำงาน รูปแบบที่เหมาะกับเคสของฉันคือ:

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 = "ตำแหน่งของ LF:" + t.value.indexOf ("\ n");

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

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

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

ในขณะที่รหัสนี้อาจตอบคำถาม แต่มีบริบทเพิ่มเติมเกี่ยวกับสาเหตุและ / หรือวิธีการที่รหัสนี้ตอบคำถามช่วยปรับปรุงมูลค่าระยะยาว
Alex Riabov

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.