Problema:
tengo algunos formularios donde la gente escribe texto en un TEXTAREA y, lógicamente separa párrafos, líneas, identa o tabula, etc…. El lío viene cuando se graba dicho valor en una base de datos y, posteriormente, queremos mostrar dicho valor en pantalla, dentro de, por ejemplo, un DIV.
Entonces, como el texto explicitamente no contiene ninguna etiqueta HTML para maquetarla, si lo mostramos en el DIV saldrá una «masa» de frases en un sólo párrafo (no respeta los fines de línea \n ni los tabuladores \t).
Solución 1 (en javascript, a evitar):
Sencillamente cambiar el DIV por una etiqueta PRE, o bien, añadir PRE como único hijo directo de DIV (DIV > PRE > texto..), lógicamente usando javascript.
Solución 2 (en css):
Hacer que DIV se comporte como un PRE.
Para ello existe en FF2+, IE8:
- white-space: pre-wrap
En IE7- (no está implementado del todo white-space):
- white-space : pre
- word-wrap : break-word
Solución 3 (implementar 2 en jquery):
jQuery.fn.element2pre = function(){ return this.css((jQuery.browser.msie) ? {whiteSpace: 'pre',wordWrap : 'break-word'} : {whiteSpace: 'pre-wrap'})};
donde se puede aplicar, por ejemplo a un DIV del tipo:
$('div.textarea').element2pre();