2011-12-25 15 views
191
<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> 

Próbowałem obu, ale nowa linia nie odzwierciedla podczas renderowania pliku html. Jak mogę to zrobić?Nowa linia w obszarze tekstowym

Odpowiedz

381

Spróbuj tego:

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

&#10; Line Feed i &#13; powrót karetki są HTML entitieswikipedia. W ten sposób faktycznie parsujesz nową linię ("\ n") zamiast wyświetlać ją jako tekst.

+1

Nie wiem, co parsowanie linii nowej, zamiast "wyświetlać ją jak tekst" oznacza, ale nie ma sensu wstawiać ' '. Windows Chrome i tak to eliminuje. Kiedy podzielisz 'textarea.value', zrobisz to za pomocą znaku' \ n' i nie ma żadnego '\ r' w wartości textarea, respektu źródła. –

+0

@LittleAlien https://jsfiddle.net/v0y3xvpx/1/ - odpowiedź oparta na pytaniu OP, oczywiście problem został rozwiązany – Bakudan

+0

Oczywiście przegapiłeś pytanie OP. Prawdopodobnie odpowiedziałeś na inne pytanie. To pytanie nie pyta o powrót karetki. Pyta o nową linię. Zwrot karetki nie jest konieczny dla tego pytania. Jest to również zawsze niepotrzebne, ponieważ jest usuwane przez przeglądarkę, nawet jeśli podasz ją w kodzie źródłowym. –

4

Możesz użyć \n zamiast /n.

+4

Cóż, literał '\ n' również nie zadziała, musiałby to być * aktualny * znak nowej linii. –

+0

Tak, oczywiście. Ale jestem (niepoprawnie?) Zakładając, że już to wiedział. – Zar

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

This is my statement2</textarea> 

Fiddle pokazując, że to działa: http://jsfiddle.net/trott/5vu28/.

Jeśli naprawdę chcesz to być na jednej linii w pliku źródłowym, można wstawić odwołania znakowe HTML wysunięcie wiersza i powrotu karetki, jak pokazano na odpowiedź od @Bakudan:

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

spróbować tego .. to działa:

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

zastępując na
tagi:

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

to faktycznie $ ("textarea # test"). Val(). Replace (/ \ n/g, " "); (to zastąpi wszystkie wystąpienia nowej linii) – Symba

7

Aby uzyskać nową linię wewnątrz textarea, umieścić rzeczywiste linebreak tam:

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

Znalazłem String.fromCharCode(13, 10) pomocne przy użyciu widoku silniki. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

Spowoduje to utworzenie ciągu znaków z rzeczywistymi znakami nowego wiersza, a zatem zmusza mechanizm wyświetlania do wyprowadzenia znaku nowej linii zamiast wersji z uniknięciem. Np Stosując NodeJS Ejs widok silnika - jest prosty przykład w których \ n należy wymienić:

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> 

Renders

<textarea>Blah 
blah 
blah</textarea> 

wymienićWszystkie:

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

Nowa linia = ciąg.fromCharCode (13, 10); to jedyna rzecz, która zadziałała dla mnie podczas dodawania nowej linii programowo podczas pracy. +1 na to. –

+3

Chciałbym zaproponować prawdopodobnie prostszy sposób na zastąpienie wszystkich: var regExp = new RegExp (find, "gi"); str = str.replace (regex, zastąp); –

+2

Zrobiłem 's = s.replace (/ \\ n/g, String.fromCharCode (13, 10))'. To jednak magia. Dziękuję Ci. – Glycerine

2

Po wielu testach, następujący kod działa dla mnie w 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); 
} 
2

myślę, że są mylące składni różnych języków.

  • &#10; jest (wartość HtmlEncoded ASCII lub 10) w dosłownym znakiem końca wiersza w HTML ciąg. Renderuje się on jako podział wiersza w HTML (patrz uwagi na dole).

  • \n to literał znaków linii (ASCII 10) w ciągu znaków JavaScript.

  • <br/> to podział wiersza w HTML. Wiele innych elementów, np. <p>, <div>, itp. Renderuje również podziały wierszy, chyba że zostaną nadpisane niektórymi stylami.

Mam nadzieję, że po illustration uczyni go bardziej zrozumiałym:

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>

kilka punktów, aby pamiętać o HTML:

  • atrybut elementu TEXTAREAVALUE nie render Html
  • Element P renderuje wszystkie sąsiadujące białe spacje (w tym nowe linie) jako jedną spację.
  • Znak LF nie renderuje się do nowego wiersza lub wiersza w wierszu HTML.
  • Wykonanie TEXTAREA powoduje wyświetlenie LF jako nowej linii.
0

Jeśli mówimy o użyciu wartości pola tekstowego w innym miejscu na swojej stronie i świadczenia tych nowych linii, znalazłem propperty CSS white-space: pre-wrap; do pracy bardzo dobrze, a to proste rozwiązanie. Może to pomaga komuś.

0

Moja funkcja .replace() wykorzystująca wzorce opisane w innych odpowiedziach nie zadziałała. Wzorzec, który działał w moim przypadku:

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"