Estoy haciendo que jQuery tome un contenido de área de texto y lo inserte en un li.
Quiero que conserve visualmente los saltos de línea.
Debe haber una forma realmente sencilla de hacer esto ...
javascript
jquery
line-breaks
gbhall
fuente
fuente
Respuestas:
fuente
simplemente puedes hacer:
fuente
Ponga esto en su código (preferiblemente en una biblioteca de funciones js general):
Uso:
La creación de una función de prototipo de cadena le permite utilizarla en cualquier cadena.
fuente
Con el espíritu de cambiar la representación en lugar de cambiar el contenido , el siguiente CSS hace que cada nueva línea se comporte como
<br>
:Por qué dos reglas:
pre-line
solo afecta a las nuevas líneas (gracias por la pista, @KevinPauli). IE6-7 y otros navegadores antiguos recurren a los más extremos,pre
que también incluyennowrap
y renderizan múltiples espacios. Detalles sobre estas y otras configuraciones (pre-wrap
) en mozilla y css-tricks (gracias @Sablefoste).Si bien en general soy reacio a la predilección de SO por adivinar la pregunta en lugar de responderla, en este caso, reemplazar las líneas nuevas con
<br>
marcas puede aumentar la vulnerabilidad al ataque de inyección con la entrada sin lavar del usuario. Está cruzando una línea roja brillante cada vez que se encuentra cambiando las.text()
llamadas a las.html()
que la pregunta literal implica que debería hacerse. (Gracias @AlexS por destacar este punto). Incluso si descarta un riesgo de seguridad en ese momento, los cambios futuros podrían introducirlo sin saberlo. En cambio, este CSS le permite obtener saltos de línea duros sin marcado utilizando el más seguro.text()
.fuente
white-space:
opciones, comopre-wrap
. Ver css-tricks.com/almanac/properties/w/whitespace.html()
para configurar el contenido, lo que a su vez permitiría al usuario insertar HTML arbitrario a menos que lo filtre por adelantado..html()
peligro @AlexS, trató de incorporar.Solución
Usa este código
fuente
Esta función de JavaScript considera si usar insertar o reemplazar para manejar el intercambio.
(Insertar o reemplazar saltos de línea HTML)
Demostración - JSFiddle
fuente
Escribí una pequeña extensión de jQuery para esto:
fuente
para mejorar la respuesta aceptada de @Luca Filosofi,
si es necesario, cambiar la cláusula inicial de esta expresión regular para que sea
/([^>[\s]?\r\n]?)
también ignorará los casos en los que la nueva línea viene después de una etiqueta Y algunos espacios en blanco, en lugar de solo una etiqueta seguida inmediatamente por una nueva líneafuente
Otra forma de insertar texto de un área de texto en el DOM manteniendo los saltos de línea es usar la propiedad Node.innerText que representa el contenido de texto renderizado de un nodo y sus descendientes.
Como captador, se aproxima al texto que obtendría el usuario si resaltara el contenido del elemento con el cursor y luego lo copiara en el portapapeles.
La propiedad se convirtió en estándar en 2016 y es compatible con los navegadores modernos. ¿Puedo usar : cobertura global del 97% cuando publiqué esta respuesta?
fuente