Wie füge ich einem HTML-Textbereich Zeilenumbrüche hinzu?

156

Ich bearbeite ein <textarea>mit JavaScript. Das Problem ist, dass wenn ich Zeilenumbrüche mache, diese nicht angezeigt werden. Wie kann ich das machen?

Ich erhalte den Wert zum Schreiben einer Funktion, aber es werden keine Zeilenumbrüche ausgegeben.

Djairo
quelle
Codepen-Demo mit Regex und <pre></pre>Lösungen, die hier vorgestellt werden: codepen.io/a-guerrero/pen/grgVBo
a.guerrero.g87

Antworten:

265

Das Problem ergibt sich aus der Tatsache, dass Zeilenumbrüche ( \n\r?) Nicht mit HTML- <br/>Tags identisch sind

var text = document.forms[0].txt.value;
text = text.replace(/\r?\n/g, '<br />');

AKTUALISIEREN

Da viele der Kommentare und meine eigenen Erfahrungen gezeigt haben, dass diese <br> Lösung nicht wie erwartet funktioniert, ist hier ein Beispiel dafür, wie eine neue Zeile an eine textareaVerwendung von '\ r \ n' angehängt wird.

function log(text) {
    var txtArea ;

    txtArea = document.getElementById("txtDebug") ;
    txtArea.value +=  text + '\r\n';
}

Ich habe beschlossen, dies zu bearbeiten und nicht als neue Frage, da dies eine viel zu beliebte Antwort ist, um falsch oder unvollständig zu sein.

TStamper
quelle
7
Das funktioniert auch bei mir. In jQuery können Sie Folgendes tun: $ ('# caption'). Html ($ ('# caption'). Text (). Replace (/ \ n \ r? / G, '<br />')) ;;
DavGarcia
2
Der Zeilenumbruch Regexp sollte /(\r\n|\n|\r)/gm textfixer.com/tutorials/javascript-line-breaks.php
tothemario
3
Der richtige reguläre Ausdruck ist /\r\n?|\n/gohne Erfassung, nicht mehrzeilig.
aMarCruz
5
Der Verdächtige <br>ist falsch. Für einen universellen Zeilenumbruch in einem gewünschten Textbereich\r\n . Beispielsweise ignoriert der UC-Browser <br> und \ n in Textbereichen. Siehe Hinzufügen eines Zeilenumbruchs in einem HTML-Textbereich .
Bob Stein
2
Die Verwendung von <br> innerhalb eines Textbereichs funktioniert nicht. Zumindest nicht in Chrome, wo ich getestet habe. Die Verwendung von \ n scheint jedoch zu funktionieren. Verwenden Sie <br>, wenn Sie den Text als reines HTML einfügen möchten, dh außerhalb eines Eingabeelements.
Snorvarg
24

Wenn Sie ein allgemeines Java-Skript verwenden und dem Textbereichswert dann eine Zeichenfolge zuweisen müssen

 document.getElementById("textareaid").value='texthere\\\ntexttext'.

Sie müssen ersetzen \noder < br >zu\\\n

Ansonsten gibt es Uncaught SyntaxError: Unexpected token ILLEGALauf allen Browsern.

jit
quelle
18

Vielleicht findet jemand dies nützlich:

Ich hatte ein Problem mit Zeilenumbrüchen, die von der Servervariablen an die Javascript-Variable übergeben wurden, und dann schrieb Javascript sie in den Textbereich (unter Verwendung der Wertebindungen von knockout.js).

Die Lösung bestand darin, neuen Zeilen doppelt zu entkommen:

orginal.Replace("\r\n", "\\r\\n")

auf der Serverseite, weil mit nur einzelnen Escape-Zeichen Javascript nicht analysiert wurde.

0lukasz0
quelle
Die Verwendung von "\\ n" funktioniert für mich unter Windows und ich gehe davon aus, dass es unter Linux-Systemen gut funktioniert.
Samih A
18

Sie müssen \nfür linebreaksinnen verwendentextarea

Strubester
quelle
Funktioniert in Firefox v71. Vielen Dank!
Eric Sondergard
6

Wenn Sie Text auf Ihrer eigenen Seite anzeigen möchten, können Sie das <pre>Tag verwenden.

document.querySelector('textarea').addEventListener('keyup', function() {
  document.querySelector('pre').innerText = this.value;
});
<textarea placeholder="type text here"></textarea>
<pre style="font-family: inherits">
The
new lines will
be respected
      and spaces too
</pre>

Cristian Traìna
quelle
3

Eine neue Zeile ist nur ein Leerzeichen für den Browser und wird nicht anders behandelt als ein normales Leerzeichen (""). Um eine neue Zeile zu erhalten, müssen Sie <BR />Elemente einfügen .

Ein weiterer Versuch, das Problem zu lösen: Geben Sie den Text in das Textfeld ein und fügen Sie dann JavaScript hinter einer Schaltfläche hinzu, um die unsichtbaren Zeichen in etwas Lesbares umzuwandeln und das Ergebnis in a zu speichern DIV. Das sagt Ihnen, was Ihr Browser will.

Aaron Digulla
quelle
3

Ich habe einen Textbereich mit der ID #infoartist folgen:

<textarea id="infoartist" ng-show="dForm" style="width: 100%;" placeholder="Tell your contacts and collectors about yourself."></textarea>

Im Javascript-Code erhalte ich den Wert des Textbereichs und ersetze die neue Zeile (\ n \ r) durch ein <br />Tag, wie z.

var text = document.getElementById("infoartist").value;
text = text.replace(/\r?\n/g, '<br />');

Wenn Sie also jquery verwenden (wie ich):

var text = $("#infoartist").val();
text = text.replace(/\r?\n/g, '<br />');

Hoffe es hat dir geholfen. :-)

NgaNguyenDuy
quelle
0

Wenn Sie nur den Wert des Testbereichs mit Zeilenumbrüchen an den Server senden müssen, verwenden Sie nl2br

Igor L.
quelle
0

Hier ist das, was ich für die gleichen Probleme getan habe, die ich hatte.

Wenn ich den Text in jsp an die nächste Seite weitergebe, lese ich ihn als Textbereich, anstatt so etwas zu lesen

Die Ausgabe kam also so, wie Sie es wollten. und für andere Eigenschaften können Sie wie folgt verwenden.

<textarea style="background-color: white; border: none; width:660px;font-family: Arial, Helvetica, sans-serif; font-size:1.0em; resize:none;" name="text" cols="75" rows="15" readonly="readonly" ><s:property value="%{text}"/></textarea>
raja777m
quelle