Este código edita texto, en este caso inserta una lista ordenada. Pero no logro que funcione correctamente en IE 5,6,7.
El problema está en que si hay más de un botón en el formulario, no inserta la lista en el lugar donde el cursor está o sobre la porción de texto que has sido seleccionado.
Si por el contrario solo dejo un botón (LORDENADA), funciona perfectamente. ¿Alguién prodría probralo y ver si le ocurre lo mismo?.
Código PHP:
<html>
<head>
<title></title>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<script langage="javascript" type="text/javascript">
// Comprueba Navegador y Plataforma del pc
var clientPC = navigator.userAgent.toLowerCase(); // Coge info cliente
var clientVer = parseInt(navigator.appVersion); // Coge versión navegador
var is_ie = ((clientPC.indexOf("msie") != -1) && (clientPC.indexOf("opera") == -1));
var is_nav = ((clientPC.indexOf('mozilla')!=-1) && (clientPC.indexOf('spoofer')==-1)
&& (clientPC.indexOf('compatible') == -1) && (clientPC.indexOf('opera')==-1)
&& (clientPC.indexOf('webtv')==-1) && (clientPC.indexOf('hotjava')==-1));
var is_moz = 0;
var is_win = ((clientPC.indexOf("win")!=-1) || (clientPC.indexOf("16bit") != -1));
var is_mac = (clientPC.indexOf("mac")!=-1);
function listaord () {
var txtarea = document.getElementById('texto');
var opcion= new Array();
var i,j
var suma = 0;
var Cursor = 0;
if ((clientVer >= 4) && is_ie && is_win) {
var theSelection = document.selection.createRange().text;
// IE
if (document.selection) {
txtarea.focus();
var Sel = document.selection.createRange();
Sel.moveStart ('character', -txtarea.value.length);
var SelEmpz = Sel.text.length-2;
var SelLargo = txtarea.value.length;
var s1 = (txtarea.value).substring(0,SelEmpz);
var s2 = (txtarea.value).substring(SelEmpz,SelLargo);
var SelFin = s1.length - theSelection.length -1; // caracteres que deja atrás
var s1_selec = (txtarea.value).substring(0,SelFin);
var abre = "[list=1]\n";
var cierra = "[/LIST=]";
if (!theSelection) {
// Contamos los saltos de linea
var cad = s1;
var salinea = new String();
salinea = cad.split("\n");
alert("texto1 " +s1+ "\ntexto2 " +s2+ "\nSaltos " +salinea.length);
txtarea.value = s1 + abre + cierra + s2;
for (i=0; i<=opcion.length; i++) {
opcion[i]=prompt("Ingresa los elementos de la lista de uno en uno","");
if ((opcion[i]== null) || (opcion[i]== "undefined") || (opcion[i] == "") || (opcion[i] ==' ')) {
Cursor= s1.length + abre.length + suma + cierra.length - salinea.length + 1;
return(Cursor);
}
txtarea.value = s1 + abre;
for (j=0; j<=i; j++) {
txtarea.value += "[*]" + opcion[j] + "\n";
}
txtarea.value += cierra + s2;
suma += (opcion[i].length+4);
}
}
if (theSelection) {
// Contamos los saltos de linea
var cad = s1_selec;
var salinea = new String();
salinea = cad.split("\n");
alert("texto1 " +s1_selec+ "\ntexto2 " +s2+ "\nSaltos " +salinea.length);
txtarea.value = s1_selec + abre;
opcion = theSelection.split(" ");
for (j=0; j<opcion.length; j++) {
txtarea.value += "[*]" + opcion[j] + "\n";
suma += (opcion[j].length+4);
}
txtarea.value += cierra + s2;
var Cursor = s1_selec.length + abre.length + suma + cierra.length - salinea.length + 1;
return(Cursor);
}
}
}
// Firefox
else if (txtarea.selectionStart ||txtarea.selectionStart == '0')
SelEmpz = txtarea.selectionStart;
}
function PosicionCursor(pos) {
var txtarea = document.getElementById('texto')
if(txtarea.setSelectionRange) {
txtarea.focus();
txtarea.setSelectionRange(pos,pos);
}
else if (txtarea.createTextRange) {
var rango = txtarea.createTextRange();
rango.collapse(true);
rango.moveEnd('character', pos);
rango.moveStart('character', pos);
rango.select();
}
}
function InListaOrd()
{
PosicionCursor(listaord());
}
</script>
</head>
<body>
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<form name="editexto">
<td>
<input type="button" value="b" />
<input type="button" value="u" />
<input type="button" value="i" />
<br>
<input type="button" value="Left" />
<input type="button" value="Center" />
<input type="button" value="Right" />
<br>
<input type="button" value="Url" />
<br>
<input type="button" value="LORDENADA" onclick="InListaOrd();" />
<br>
<input type="button" value="Ldesordenada" />
</td>
</tr>
<tr>
<td><textarea id="texto" name="texto" rows="5" cols="31" colspan="23"></textarea></td>
</form>
</tr>
</table>
</body>
</html>