Foros del Web » Programando para Internet » Javascript »

Saber la posicion del cursor en un texto

Estas en el tema de Saber la posicion del cursor en un texto en el foro de Javascript en Foros del Web. Hola a todos, resulta que tengo una duda... como puedo saber la posicion del cursor en un texto y volverlo a posicionar. por ejemplo: si ...
  #1 (permalink)  
Antiguo 24/02/2006, 10:16
 
Fecha de Ingreso: mayo-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 1
Saber la posicion del cursor en un texto

Hola a todos, resulta que tengo una duda... como puedo saber la posicion del cursor en un texto y volverlo a posicionar. por ejemplo: si tengo una caja de texto con la palabra "cajas" y el cursor lo tengo en la palabra j, quisiera que me devolviera la posicion por ejemplo 3 y despues volver a posicionar el cursor en esa posicion... espero y sea posible.. de antemano gracias
  #2 (permalink)  
Antiguo 08/03/2006, 09:53
 
Fecha de Ingreso: mayo-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 1
Respuesta al Cursor

Hola a Todos, pues resulta que hace como 2 semanas anduve batallando con saber la posicion del cursor, y despues de haber buscado en muchos foros, no encontre la respuesta, aqui les va la solucion.

<html>
<head>
<title>Untitled</title>
<script language="JavaScript">
function getPosCaret(input)
{
var range = document.selection.createRange();
var range2 = input.createTextRange();
range2.collapse(true);
range2.moveEnd('character', 0);
range2.setEndPoint('EndToStart', range);
distancia=range2.text.length
pos_final=parseFloat(input.value.length)- parseFloat(distancia)
range2.move('character', pos_final)
return pos_final;
}
</script>
</head>

<body>
<form name="formulario">
<input type="text" name="txt_cursor" value="123456" onkeypress="alert(getPosCaret(this))" style="text-align='right'">
</form>
</body>
</html>

lo que hago es crear 2 rangos, una la posicion donde se encuentra actualmente y el otro inicializo al final y despues veo la distrancia entre los con setEndPoint. Espero a alguien le sirva....

Aclaracion, no se si funcione en otron navegador que no sea IE, ni me interesa, para que luego no me anden criticando
  #3 (permalink)  
Antiguo 08/03/2006, 10:26
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola Davhira:

No sé si te interesa que valga en otros navegadores, pero he referenciado esta página en muchas ocasiones: http://www.pepemolina.com/editor/index.html

Creo que te puede interesar.

Saludos
__________________
Por favor:
No hagan preguntas de temas de foros en mensajes privados... no las respondo
  #4 (permalink)  
Antiguo 08/03/2006, 11:50
 
Fecha de Ingreso: mayo-2005
Mensajes: 63
Antigüedad: 19 años
Puntos: 1
Muy buen Editor

Hola Caricatos esta padre el editor, la posicion del cursor la necesitaba porque estaba haciendo un edit mask con formato de $ y decimales y al quitarle el formato se me perdia el cursor o el numero insertado. De hecho tambien hice varias preguntas sobre el mask

les envio el codigo del edit-mask


<html><head>
<script language="JavaScript">
function getPosCaret(input)
{
//creamos 2 rangos, uno donde este el cursor actualmente
var range = document.selection.createRange();
var range2 = input.createTextRange();
range2.collapse(true);
//se establece la posicion del segundo cursor
range2.moveEnd('character', 0);
range2.setEndPoint('EndToStart', range);
//se saca la distancia donde esta el cursor
distancia=range2.text.length
//se enconvierte la posicion de derecha a izquierda
pos_final=parseFloat(input.value.length)- parseFloat(distancia)
range2.move('character', pos_final)
//coloca el cursor despues del punto
if (pos_final==0)
pos_final=3
return pos_final;
}


function juntos_miles_caret(txt_campo)
{

var rango=txt_campo.createTextRange();
var range = document.selection.createRange();
//si hay seleccion se pasara a la variable cuando_sele
cuando_sele=range.text
seleccion_final=range.text.length
posicion_ini=getPosCaret(txt_campo)
//si el value empieza con punto,guion o parentesis lo sustituye
if (txt_campo.value.charAt(0)=='.' || txt_campo.value.charAt(0)=='-'|| txt_campo.value.charAt(0)=='(')
txt_campo.value='$0.00'
txt_campo.value=format_currency(txt_campo.value);
rango.collapse(true);
valor=txt_campo.value.length-posicion_ini
//coloca el cursor en el siguiente decimal
if (valor>=txt_campo.value.length-2 && cuando_sele=='')
valor+=1
rango.move('character',valor)
rango.select();
//detecta que se presiono la tecla punto y la coloca detras
if (event.keyCode==190 || event.keyCode==110)
cursorPunto(txt_campo,1)

//parte para que permita seleccionar, solo entra si hay seleccion
if (cuando_sele!='')
{
//se saca la posicion donde se dejo de seleccionar
pos_final=getPosCaret(txt_campo)
pos_fin=valor+seleccion_final
pos_ini=txt_campo.value.length-pos_final
rango=txt_campo.createTextRange();
rango.collapse(true);
//se coloca las posiciones
rango.moveEnd('character', pos_fin);
rango.moveStart('character', pos_ini);
rango.select();
}
}
function cursorPunto(txt_campo, posicion)
{
//si no se le asigna posicion por default es antes del punto AQUI.00
(posicion==undefined)?posicion=0:null
rango=txt_campo.createTextRange();
longitud=txt_campo.value.length
valor=String(txt_campo.value)
//busca el primer punto mientras que el contador aumenta(posicion)
for (i=0;i<longitud;i++)
{
(valor.charAt(i)=='.')?i=longitud:posicion++;
}
rango.move('character',posicion)
rango.select();
}

function format_currency(cant)
{
cant=unformat_currency(cant)
var temp, temp1, temp2, strng, cifras, inic
if (cant<0)
{
inic='$-'
cant=cant*-1
}
else
{
inic='$'
}

strng=''
cifras=Math.round((cant-(Math.floor(cant)))*100)
cant=Math.floor(cant)

if (cifras<10)
{
cifras='0'+String(cifras)
}

while (cant>=1000)
{
temp=cant/1000
temp1=Math.floor(temp)
temp2=temp-temp1
cant=Math.floor(cant/1000)
temp2=Math.round(temp2*1000)
if (temp2<10)
{
temp2='0'+'0'+String(temp2)
}
else
{
if (temp2<100)
{
temp2='0'+String(temp2)
}
else
{
temp2=String(temp2)
}
}
strng=','+temp2+strng
}
strng=inic+cant+strng+'.'+cifras
return strng;
}

function unformat_currency(strng)
{
validos="0123456789-(.";
var strng_new='';
punto=false;
for (var s=0; s<strng.length; s++)
{
if (!(validos.indexOf(strng.charAt(s))==-1))
{
// lo siguiente es necesario porque hay algunos sistemas operativos que ponen parentesis para las cantidades negativas
if (strng.charAt(s)=='(')
{
strng_new=strng_new+'-'
}
else if ( (strng.charAt(s)!='.') || ((strng.charAt(s)=='.') && !punto) )
{
strng_new=strng_new+String(strng.charAt(s))
}
(strng.charAt(s)=='.')?punto=true:null;
}
}
return strng_new;
}

function textboxSelect(oTextbox)
{
var oRange = oTextbox.createTextRange();
oRange.moveStart("character", 0);
oRange.moveEnd("character", oTextbox.value.length-1);
oRange.select();
}

</script>
</head>
<body>
<form name="formulario">
Precio:<input name="enteros" type="text" onkeyup="juntos_miles_caret(this)" onBlur="this.value=format_currency(this.value);" size="15" maxlength="15" onfocus="bag=false;textboxSelect(this)" style="text-align:'right'" value="$123.55" onkeypress="(event.keyCode==8)?this.fireEvent('onk eyup'):null;(event.keyCode==35)?keycode=0:null;">
</form>
</body>
</html>
  #5 (permalink)  
Antiguo 12/08/2009, 09:33
Avatar de Koke_Infortecnica  
Fecha de Ingreso: agosto-2009
Mensajes: 23
Antigüedad: 14 años, 8 meses
Puntos: 0
Respuesta: Saber la posicion del cursor en un texto

Hola

Hay algun script me diga la posicion del cursor dentro de un iframe editable

Muchas gracias
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:48.