Antes de nada he de decir que el código está diseñado para FireFox.
Estoy intentando crear algo de bbcode y me ha surgido un problema que no logro solucionar. Usando una ventana prompt inserto una lista en el textarea (lo tipico), el problema llega cuando quiero insertar dos o más opciones.
Con textarea.value = opcion; la segunda opción se superpone a la primera y la tercera a la segunda y así sucesivamente, como resultado solo se queda impresa en el textarea la última opción.
Si uso textarea.value += opcion; se imprimen todas las opciones que el usuario quiera, pero al final de la cadena.
Con este código consigo que se impriman todas la opciones y en el lugar elegido por el usuario, pero la verdad es que no me acaba de gustar. Es bastante largo y tedioso de explicar el por qué, así que si alguien fuera tan amable de hecharle un vistazo, a ver si me da una solución más elegante.
Código:
Gracias <html> <head> <title></title> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <script language="JavaScript" type="text/javascript"> function listaord () { var txtarea = document.getElementById("t"); var opcion = null; var selLargo = txtarea.textLength; var selEmpz = txtarea.selectionStart; var selFin = txtarea.selectionEnd; var s1 = (txtarea.value).substring(0,selEmpz); var s2 = (txtarea.value).substring(selEmpz, selFin); var s3 = (txtarea.value).substring(selFin, selLargo); var abre = ""; txtarea.value = s1 + abre; do { var opcion= prompt("Ingresa los elementos de la lista de uno en uno",""); if ((opcion==null) || (opcion== "undefined") || (opcion=="") || (opcion==' ')) { txtarea.value += cierra + s3; txtarea.focus(); return; } txtarea.value += "[*]" + opcion + "\n"; //var cur = s1.length + abre.length + 4 + opcion.length; //return(cur); } while ((opcion== null) || (opcion== "undefined") || (opcion != "") || (opcion !=' ')) } function PosicionCursor(pos) { var txtarea = document.getElementById("t"); if (txtarea .createTextRange) { var rango = txtarea .createTextRange(); rango.collapse(true); rango.moveEnd('character', pos); rango.moveStart('character', pos); rango.select(); } else if (txtarea .setSelectionRange) { txtarea .focus(); txtarea .setSelectionRange(pos,pos); } } function Lista() { PosicionCursor(listaord()); } </script> </head> <body> <form name="p"> <textarea id="t" name="firma" rows="10" cols="50"></textarea> <br><br> <input type="button" value="LOrdenada" onclick="Lista();" > </form> </body> </html>
- \n"; var cierra = "