文字区域中的新行


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文件时没有换行。我怎样才能做到这一点?

Answers:


523

试试这个:

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

&#10;换行符和&#13;回车符是HTML实体Wikipedia。这样,您实际上是在分析新行(“ \ n”),而不是将其显示为文本。


2
@LittleAlien jsfiddle.net/v0y3xvpx/1-基于OP问题的答案,显然问题已解决
Bakudan

2
不只是&#10;足够的解析\n
道格

是否同时需要换行符和回车符取决于Windows和macOS?
SeizeTheDay

1
@SeizeTheDay是的,但不是MacOS-它是Linux / BSD vs Windows
Bakudan

@爆蛋哦!我认为基于Unix的macOS仍然会遇到该问题。但是您确定是正确的,区别是更普遍的。
SeizeTheDay

27

我发现String.fromCharCode(13, 10)使用视图引擎时很有帮助。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

这将创建一个包含实际换行符的字符串,从而强制视图引擎输出换行符而不是转义版本。例如:使用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。
罗尼·拉比诺维奇

3
我想建议一种替换所有内容的简单方法:var regExp = new RegExp(find,“ gi”); str = str.replace(regExp,replace);
罗尼·拉比诺维奇

2
我做到了s = s.replace(/\\n/g, String.fromCharCode(13, 10) )。虽然这是魔术。谢谢。
甘油

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

This is my statement2</textarea>

Fiddle显示它有效:http : //jsfiddle.net/trott/5vu28/

如果您确实希望将其放在源文件的一行中,则可以为换行符和回车符插入HTML字符引用,如@Bakudan的答案所示:

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


21

我认为您在混淆不同语言的语法。

  • &#10;是(HTML字符串中的HtmlEncoded值或)HTML字符串中的换行字符文字。但是换行符不会呈现在HTML(见注在底部)换行。

  • \nJavascript字符串中的换行字符文字(ASCII 10)。

  • <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的几点注意事项:

  • 元素的innerHTMLTEXTAREA不呈现Html。请尝试以下操作:<textarea>A <a href='x'>link</a>.</textarea>进行查看。
  • P元件呈现所有连续白色空间(包括新的线)作为一个空间。
  • LF字符不会呈现为HTML中的新行或换行符。
  • TEXTAREA呈现LF作为文本区域箱内的新线。

1
从表面上看,这篇文章看起来很复杂,但实际上包含了大量有用的信息。如果您要给您添加编程行,<textarea/>这是您需要的帖子!
Morvael

<br/>是我一直在寻找的东西
约翰尼(Johnny)2007年


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()。replace(/ \ n / g,“&#10;”); (这将替换所有出现的新行)
Claudiu 2013年

7

要在文本区域内换行,请在此处实际换行:

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


5

您可能要使用\n而不是/n


5
好吧,文字\n也不起作用,它必须是实际的换行符。
格雷格·希吉尔

当然是。但是我(不正确?)假设他已经知道这一点。
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 '18年

-5

只需使用<br>
ex:

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

结果:
blablablabla
kakakakakak
fafafafafaf

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.