Nuova riga nell'area di testo


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>

Ho provato entrambi ma la nuova riga non si riflette durante il rendering del file html. Come lo posso fare?

Risposte:


524

Prova questo:

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

&#10;Feed di riga e &#13;ritorno a capo sono entità HTML wikipedia . In questo modo stai effettivamente analizzando la nuova riga ("\ n") anziché visualizzarla come testo.


2
@LittleAlien jsfiddle.net/v0y3xvpx/1 - risposta basata sulla domanda del PO, ovviamente il problema è stato risolto
Bakudan,

2
non è &#10;abbastanza per analizzare il \n?
Doug

Non dipende da Windows vs macOS se sono necessari sia i caratteri di avanzamento riga sia i caratteri di ritorno a capo, o addirittura analizzati, giusto?
SeizeTheDay,

1
@SeizeTheDay sì, ma non è MacOS - è Linux / BSD vs Windows
Bakudan

@Bakudan Oh! Pensavo che macOS, essendo basato su Unix, avrebbe ancora quel problema. Ma hai sicuramente ragione, la differenza è più generale.
SeizeTheDay,

28

Ho trovato String.fromCharCode(13, 10)utile usando i motori di visualizzazione. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/fromCharCode

Questo crea una stringa con gli attuali caratteri di nuova riga e forza il motore di visualizzazione a generare una nuova riga anziché una versione con escape. Ad esempio: utilizzo del motore di visualizzazione EJS di NodeJS - Questo è un semplice esempio in cui è necessario sostituire any \ 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>

Renders

<textarea>Blah
blah
blah</textarea>

sostituisci tutto:

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
The newline = String.fromCharCode (13, 10); è l'unica cosa che ha funzionato per me aggiungendo programmaticamente una nuova linea durante il runtime. +1 su quello.
Ronen Rabinovici,

3
Vorrei suggerire forse un modo più semplice per sostituire tutto: var regExp = new RegExp (find, "gi"); str = str.replace (regexp, sostituire);
Ronen Rabinovici,

2
L'ho fatto s = s.replace(/\\n/g, String.fromCharCode(13, 10) ). Questa è magia però. Grazie.
Glicerina

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

This is my statement2</textarea>

Fiddle dimostrando che funziona: http://jsfiddle.net/trott/5vu28/ .

Se vuoi davvero che questo si trovi su una singola riga nel file di origine, puoi inserire i riferimenti ai caratteri HTML per un feed di riga e un ritorno a capo come mostrato nella risposta di @Bakudan:

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


22

Penso che tu stia confondendo la sintassi di diverse lingue.

  • &#10;è (il valore HtmlEncoded di ASCII 10 o) il carattere di avanzamento riga letterale in una stringa HTML . Ma il carattere di avanzamento riga NON viene visualizzato come interruzione di riga in HTML (vedere le note in fondo).

  • \nè il carattere di avanzamento riga letterale (ASCII 10) in una stringa Javascript .

  • <br/>è un'interruzione di riga in HTML. Molti altri elementi, ad esempio <p>, <div>ecc., Inoltre, rendono le interruzioni di riga a meno che non vengano sovrascritte con alcuni stili.

Speriamo che la seguente illustrazione lo chiarisca:

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>

Alcuni punti da notare su HTML:

  • Il innerHTMLvalore TEXTAREAdell'elemento non visualizza HTML. Prova quanto segue: <textarea>A <a href='x'>link</a>.</textarea>per vedere.
  • L' Pelemento esegue il rendering di tutti gli spazi bianchi contigui (comprese le nuove linee) come uno spazio.
  • Il carattere LF non viene visualizzato in una nuova riga o interruzione di riga in HTML.
  • La TEXTAREArende LF come una nuova riga all'interno della casella di testo.

1
A prima vista, questo post sembra complicato, ma in realtà contiene MOLTE informazioni utili. Se stai aggiungendo in modo progammatico delle righe al tuo, <textarea/>questo è il post che ti serve!
Morvael,

<br/>è quello che stavo cercando
Johnny Five,

14

Interrompere immettere la riga di parole chiave in Textarea utilizzando CSS:

white-space: pre-wrap;

1
Questo dovrebbe essere più alto
Rodney Salcedo,

è il metodo più semplice per ottenere il risultato richiesto, grazie @Suraj
Moaz Ateeq

Questa è la risposta
anvd

7

prova questo .. funziona:

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

in sostituzione di
tag:

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

3
è effettivamente $ ("textarea # test"). val (). replace (/ \ n / g, "& # 10;"); (questo sostituirà tutte le occorrenze della nuova linea)
Claudiu,

7

Per ottenere una nuova riga all'interno dell'area di testo, inserisci una vera interruzione di riga lì:

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


5

Potresti voler usare \ninvece di /n.


5
Beh, \nneanche un letterale funzionerà, dovrebbe essere una vera newline.
Greg Hewgill,

Sì, naturalmente. Ma sto (erroneamente?) Supponendo che lo sapesse già.
Zar,

2

Dopo molti test, il seguente codice funziona per me in 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

La mia .replace()funzione utilizzando gli schemi descritti nelle altre risposte non ha funzionato. Il modello che ha funzionato per il mio caso è stato:

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 = "Posizione di LF:" + t.value.indexOf ("\ n");

p3.innerText = t.value.replace("\n", "");

<textarea id="t">Line 1&#10;Line 2</textarea>

<p id='p3'></p>

Mentre questo codice può rispondere alla domanda, fornendo un contesto aggiuntivo riguardo al perché e / o al modo in cui questo codice risponde alla domanda migliora il suo valore a lungo termine.
Alex Riabov,

-5

basta usare <br>
ex:

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

risultato:
blablablabla
kakakakakak
fafafafafaf

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.