텍스트 영역의 줄 바꿈


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 엔티티 wikipedia 입니다. 이렇게하면 실제로 새 줄 ( "\ n")을 텍스트로 표시하지 않고 구문 분석합니다.


2
@LittleAlien jsfiddle.net/v0y3xvpx/1-OP 질문을 바탕으로 답변, 분명히 문제가 해결되었습니다
Bakudan September

2
&#10;구문 분석하기에 충분 하지 \n않습니까?
Doug

줄 바꿈 문자와 캐리지 리턴 문자가 모두 필요한지 또는 올바르게 구문 분석되는지 여부는 Windows 대 macOS에 의존하지 않습니까?
SeizeTheDay

1
@SeizeTheDay 예, 그러나 MacOS는 아닙니다-Linux / BSD와 Windows입니다
Bakudan

@ 바쿠 단 아! 유닉스 기반의 macOS에도 여전히 문제가 있다고 생각했습니다. 그러나 당신은 확실히 맞습니다. 차이가 더 일반적입니다.
SeizeTheDay

28

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>

전부 교체:

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/ .

소스 파일에서 이것을 한 줄로 만들고 싶다면 @Bakudan의 답변에 표시된 것처럼 줄 바꿈과 캐리지 리턴에 대한 HTML 문자 참조를 삽입 할 수 있습니다.

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


22

다른 언어의 구문을 혼란스럽게 생각합니다.

  • &#10;HTML 문자열 의 (HtmlEncoded 값 ASCII 10 또는 줄 바꿈 문자 리터럴)입니다 . 그러나 줄 바꿈 문자는 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요소는 모든 인접한 공백 (새 줄 포함)을 하나의 공백으로 렌더링합니다.
  • LF 문자는 HTML에서 줄 바꿈 또는 줄 바꿈으로 렌더링되지 않습니다.
  • TEXTAREA텍스트 영역 상자 안에 새로운 라인으로 LF를 렌더링합니다.

1
이 글은 복잡해 보이지만 실제로는 유용한 정보가 많이 포함되어 있습니다. 당신이 progamatically 당신의 라인을 추가하는 경우 <textarea/>이것은 당신 이 필요로하는 게시물입니다!
Morvael

<br/>내가 찾던 것
Johnny Five


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

7

텍스트 영역 안에 줄 바꿈을하려면 실제 줄 바꿈을 넣으십시오.

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


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

-5

그냥 <br>
ex를 사용하십시오 :

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

결과 :
blablablabla
kakakakakak
fafafafafaf

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.