テキスト領域の改行


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ファイルのレンダリング中に新しい行が反映されません。どうやってやるの?

回答:


523

これを試してください:

    <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

@爆弾ああ!Unixベースであるため、macOSにはまだその問題があると思いました。しかし、あなたは確かに正しい、違いはより一般的です。
SeizeTheDay

27

私が見つけたString.fromCharCode(13, 10)ビューエンジンを使用する場合に便利。 https://developer.mozilla.org/en-US/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>

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
改行= String.fromCharCode(13、10); 実行時にプログラムで新しい行を追加するために私のために働いた唯一のものです。+1。
Ronen Rabinovici

3
私はおそらくすべてを置き換えるためのより簡単な方法を提案したいと思います:var regExp = new RegExp(find、 "gi"); str = str.replace(regExp、replace);
Ronen Rabinovici 2015

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>

それが機能することを示すフィドル:http : //jsfiddle.net/trott/5vu28/

これをソースファイルの1行に本当に入れたい場合は、@ Bakudanからの回答に示すように、ラインフィードとキャリッジリターンのHTML文字参照を挿入できます。

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


21

異なる言語の構文を混乱させていると思います。

  • &#10;HTML文字列のラインフィード文字リテラル(ASCII 10のHtmlEncoded値)。ただし、改行文字は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について注意すべきいくつかの点:

  • 要素のinnerHTML値はTEXTAREAHTMLをレンダリングしません。以下を試してみ<textarea>A <a href='x'>link</a>.</textarea>てください。
  • P要素は、1つの空間として(改行を含む)すべての連続した空白をレンダリングします。
  • LF文字は、HTMLの新しい行または改行にレンダリングされません。
  • TEXTAREALFはテキストエリアボックス内の新しい行としてレンダリングします。

1
一見するとこの投稿は複雑に見えますが、実際には多くの有用な情報が含まれています。プログラムに行を追加する場合<textarea/>は、これが必要な投稿です。
Morvael

<br/>私が探していたもの
ジョニーファイブ


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


5

\n代わりに使用したい場合があり/nます。


5
まあ、リテラル\nも機能しません。実際の改行である必要があります。
グレッグ・ヒューギル2011

はい、もちろん。しかし、私は(誤って?)彼がすでにこれを知っていると想定しています。
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 2018

-5

<br>
exを使用するだけです。

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

結果:
blablablabla
kakakakakak
fafafafafaf

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.