¿Cómo agregar saltos de línea a un área de texto HTML?

156

Estoy editando un <textarea>con JavaScript. El problema es que cuando hago saltos de línea, no se mostrarán. ¿Cómo puedo hacer esto?

Estoy obteniendo el valor para escribir una función, pero no dará saltos de línea.

djairo
fuente
Codepen demo con expresiones regulares y <pre></pre>soluciones expuestas aquí: codepen.io/a-guerrero/pen/grgVBo
a.guerrero.g87

Respuestas:

265

El problema proviene del hecho de que los saltos de línea ( \n\r?) No son lo mismo que las <br/>etiquetas HTML

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

ACTUALIZAR

Dado que muchos de los comentarios y mi propia experiencia me han demostrado que esta <br> solución no funciona como se esperaba, aquí hay un ejemplo de cómo agregar una nueva línea al textareauso de '\ r \ n'

function log(text) {
    var txtArea ;

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

Decidí hacer esto una edición, y no como una nueva pregunta porque esta es una respuesta demasiado popular para estar equivocada o incompleta.

TStamper
fuente
77
Esto también funciona para mí. En jQuery puede hacer algo como esto: $ ('# caption'). Html ($ ('# caption'). Text (). Replace (/ \ n \ r? / G, '<br />')) ;
DavGarcia
2
El salto de línea Regexp debe ser /(\r\n|\n|\r)/gm textfixer.com/tutorials/javascript-line-breaks.php
tothemario
3
La expresión regular correcta es /\r\n?|\n/gsin captura, sin multilínea.
aMarCruz
55
El sospechoso <br>está equivocado. Para un salto de línea universal en un área de texto que desee \r\n. Por ejemplo, el navegador UC ignora <br> y \ n en áreas de texto. Consulte Agregar un salto de línea en un área de texto HTML .
Bob Stein
2
Usar <br> dentro de un área de texto no funciona. Al menos no en Chrome, donde lo probé. Sin embargo, usar \ n parece funcionar. Use <br> si tiene la intención de insertar el texto como html puro, es decir, fuera de cualquier elemento de entrada.
Snorvarg
24

si usa un script java general y necesita asignar una cadena al valor del área de texto, entonces

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

es necesario sustituir \no < br >al\\\n

de lo contrario da Uncaught SyntaxError: Unexpected token ILLEGALen todos los navegadores.

jit
fuente
18

Quizás alguien encuentre esto útil:

Tuve problemas con los saltos de línea que se pasaron de la variable del servidor a la variable de JavaScript, y luego JavaScript los estaba escribiendo en textarea (usando enlaces de valor knockout.js).

la solución fue escapar dos veces de nuevas líneas:

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

en el lado del servidor, porque con solo caracteres de escape javascript no se estaba analizando.

0lukasz0
fuente
usar "\\ n" funciona para mí en Windows y supongo que funcionará bien en sistemas Linux.
Samih A
18

Necesitas usar \npara linebreaksadentrotextarea

Strubester
fuente
Funciona en Firefox v71. ¡Gracias!
Eric Sondergard
6

Si desea mostrar texto dentro de su propia página, puede usar la <pre>etiqueta.

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
fuente
3

Una nueva línea es solo un espacio en blanco para el navegador y no se tratará de manera diferente a un espacio normal (""). Para obtener una nueva línea, debe insertar <BR />elementos.

Otro intento de resolver el problema: escriba el texto en el área de texto y luego agregue algo de JavaScript detrás de un botón para convertir los caracteres invisibles en algo legible y volcar el resultado en a DIV. Eso te dirá lo que tu navegador quiere.

Aaron Digulla
fuente
3

Tengo un área de texto con ID es #infoartist seguir:

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

En el código de JavaScript, obtendré el valor de textarea y reemplazaré la nueva línea de escape (\ n \ r) por <br />etiqueta, como:

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

Entonces, si está utilizando jquery (como yo):

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

Espero que te haya ayudado. :-)

NgaNguyenDuy
fuente
0

Si solo necesita enviar el valor de testarea al servidor con saltos de línea, use nl2br

Igor L.
fuente
0

Aquí está lo que hice por el mismo problema que tuve.

cuando paso el texto a la página siguiente en jsp, lo estoy leyendo como un área de texto en lugar de leer algo como

así que la salida llegó como querías. y para otras propiedades, puede usar lo siguiente.

<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
fuente