Buenas: tardé pero logré un código que funciona bastante bien. Te permite elegir la cantidad de columnas (primer parámetro) y podés ingresar saltos de linea terminando las palabras con '*'. Para los saltos de linea fijate que el asterisco debe estar PEGADO, es decir, sin espacios, luego de la última palabra antes del salto. Si antes del salto hay un signo de puntuación o un caracter especial, simplemente pon el asterisco después del signo de puntuación, sin espacio en el medio.
Te dejo la función y un ejemplo de llamada para que veas. Fijate como se comporta y si te sirve:
La función es la siguiente:
Código:
function EscribirEnColumnas (cantCol,Texto) {
var long = Texto.length;
var arrayAux = Texto.split('*');
var cantAsteriscos = arrayAux.length - 1;
long -= cantAsteriscos;
var subLong = Math.floor(long/cantCol);
var diferencia = long - subLong * cantCol;
var arrayPalabras = Texto.split(' ');
var palabra = '';
var contLetras = 0;
var limite = 0;
var j = 0;
var palabraAux, caracter, cantCar, cantCarAux;
document.write('<table><tr>');
for (var i=1; i<=cantCol; i++) {
document.write('<td width="33%">');
limite += subLong;
if (i == 1) limite += diferencia;
while (contLetras<limite) {
palabra = arrayPalabras[j];
cantCar = palabra.length;
cantCarAux = cantCar -1;
caracter = palabra.substring(cantCarAux);
if (caracter == '*') {
palabraAux = palabra.substring(0, cantCarAux);
document.write (palabraAux + '<br>');
contLetras += palabraAux.length;
contLetras++;
}
else {
document.write(palabra + ' ');
contLetras += palabra.length;
contLetras ++;
}
j++;
}
document.write('</td>');
}
document.write('</tr></table>');
}
Para llamarla tenés que pasarle el texto como argumento y también la cantidad de columnas en que querés que se acomode. Tené cuidado de no dejar saltos de linea en el texto que pasás como parámetro, pues IE considera la instrucción terminada cuando encuentra el salto y te va a dar varios errores. Acá te dejo el ejemplo con el que probé la función:
Código:
EscribirEnColumnas (3,'Esto es un texto de prueba, logicamente tiene que aparecer todo acomodadito en bellas columnas. Para ver que se acomode tengo que poner un texto largo, pues si no el efecto no es notorio, asi que hay que completar, es decir, más bien, rellenar con cosas que en realidad no son necesarias (como contenido) pero 12345 ... y qué?' Se viene una tormeta:* mejor que saque la ropa de la soga!);
document.write('<br><br>');
EscribirEnColumnas (3,'Esto es un texto de prueba, logicamente tiene que aparecer todo acomodadito en bellas columnas.* Para ver que se acomode tengo que poner un texto largo, pues si no el efecto no es notorio, asi que hay que completar, es decir, más bien, rellenar con cosas que en realidad no son necesarias (como contenido) pero bla bla bla ... y qué?* Se viene una tormeta:* mejor que saque la ropa de la soga!');
La primera no tiene saltos de linea y la segunda tiene algunos, lo usé para ver como se comportaba la función en las dist. llamadas.
Ojo que el único marcado HTML que está preparado para soportar este script es el salto de linea <br> y lo hace con un código propio. Podés incluir otros pero los tenés que separar con espacios a los dos lados, e igual te va a traer problemas con los tamaños de las columnas.
Puede ser que las columnas estén desparejas si alguna parte del texto concentra mayor cantidad de saltos de linea, es porque no divide por lineas de texto, pero hacer eso es muy complicado. Si te trae problemas busca alguna forma de marcar manualmente el fin de cada columna con algún caracter especial, eso te permitiría acomodar las columnas a gusto.
Lo que le faltaría al script es incluirle algunos estilos, especialmente el justificado del texto, pero no recuerdo bien como es.
Para terminar: Netscape soporta el HTML MULTICOL, es una etiqueta propietaria que acomoda el texto en su interior en columnas. Le tenés que poner el atributo COLS='cant' con la 'cant' de columnas que deseas, y tiene otro parámetro pero no recuerdo su nombre ni su uso. Si te sirve buscalo o pregunta acá, en el foro.
Suerte