Foros del Web » Programando para Internet » Javascript »

Capturar texto seleccionado en un textarea

Estas en el tema de Capturar texto seleccionado en un textarea en el foro de Javascript en Foros del Web. Estaba probando el código que hay en llas FAQ para poner botones a un textarea: 31.- Textbox con botones para formato (tipo ForosDelWeb) Y se ...
  #1 (permalink)  
Antiguo 18/03/2003, 06:02
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 4 meses
Puntos: 17
Capturar texto seleccionado en un textarea

Estaba probando el código que hay en llas FAQ para poner botones a un textarea:
31.- Textbox con botones para formato (tipo ForosDelWeb)

Y se me ha ocurrido que si pudiera rodear el texto que tengo seleccionado con las etiquetas elegidas, sería la bomba

¿Cómo puedo caputar el texto seleccionado en un textarea para pasárselo a la función de Javascript?
__________________
M a l d i t o F r i k i
  #2 (permalink)  
Antiguo 18/03/2003, 09:33
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 4 meses
Puntos: 17
Ya solucioné el punto de capturar la selección, pero no sé como indicarle al script en que posición debe incluir el texto. Actualmente, me lo inserta siempre al final.
__________________
M a l d i t o F r i k i
  #3 (permalink)  
Antiguo 18/03/2003, 09:47
Avatar de Cain  
Fecha de Ingreso: enero-2002
Ubicación: Catalunya
Mensajes: 6.459
Antigüedad: 22 años, 4 meses
Puntos: 17
El código que estoy manejando es el siguiente:

Código:
<script language="Javascript">
function meter(text) {
   var postopic = document.form1.text;
   if (postopic.createTextRange && postopic.caretPos) {      
    var caretPos = postopic.caretPos;      
    caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? 
text + ' ' : text;
   }
   else postopic.value += text;
   postopic.focus(caretPos)
}

function codigo(accion) {
a=document.selection.createRange();
seleccio = a.text;
if (seleccio == '') {seleccio=prompt("Text", ""); lloc = "final";}
   switch(accion) {
    case "url":
     url = prompt("URL de l'Enllaç", "http://");
      url="<a="+url+">"+seleccio+"</a>";
      meter(url);
     break;
    case "negreta":
      negreta="<b>"+seleccio+"</b>";
      meter(negreta);
     break;
    case "cursiva":
      cursiva="<i>"+seleccio+"</i>";
      meter(cursiva);
     break;
    case "color":
     color = prompt("Color de l'Enllaç (#012345)", "#");
      color="<font color="+color+">"+seleccio+"</font>";
      meter(color);
     break;
    case "mida":
     mida = prompt("Mida del text (en punts)", "#");
      mida="<font size="+mida+">"+seleccio+"</font>";
      meter(mida);
     break;
    default:
     meter(accion);
     break;
   }
}
</script>
El formulario se llama form1 i el textarea text.

Ahora he conseguido que rodee lo que selecciono con las etiquetas necesarias, pero me lo añade al final del textarea en lugar de añadirlo en el sitio donde esta originalmente.

Ejemplo:

"Hoy hace un buen día"

Selecciono buen, hago negrita y en lugar de darme:

"Hoy hace un <b>buen</b> día" (efecto deseado)

Me da:

"Hoy hace un buen día<b>buen</b>"

¿Qué retoques debo hacerle al código para obtener el efecto deseado?
__________________
M a l d i t o F r i k i
  #4 (permalink)  
Antiguo 29/01/2008, 18:57
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 10 meses
Puntos: 1
Re: Capturar texto seleccionado en un textarea

mira, yo estoy en lo mismo, te dejo una funcion que encontre mirando el codigo de una pagina tipo fotologs, que al hacerle click en el emoticon determinado, te pone el simbolito respectivo en la ubicacion que vos estes dentro del texto, funciona de 10 en firefox pero no en IE y estoy buscando para que funcione joya en IE tambien obviamente. te dejo la funcion.

Código PHP:
// Replaces the currently selected text with the passed text.
function replaceText(texttextarea)
{
    
// Attempt to create a text range (IE).
    
if (typeof(textarea.caretPos) != "undefined" && textarea.createTextRange)
    {
        var 
caretPos textarea.caretPos;

        
caretPos.text caretPos.text.charAt(caretPos.text.length 1) == ' ' text ' ' text;
        
caretPos.select();
    }
    
// Mozilla text range replace.
    
else if (typeof(textarea.selectionStart) != "undefined")
    {
        var 
begin textarea.value.substr(0textarea.selectionStart);
        var 
end textarea.value.substr(textarea.selectionEnd);
        var 
scrollPos textarea.scrollTop;

        
textarea.value begin text end;

        if (
textarea.setSelectionRange)
        {
            
textarea.focus();
            
textarea.setSelectionRange(begin.length text.lengthbegin.length text.length);
        }
        
textarea.scrollTop scrollPos;
    }
    
// Just put it on the end.
    
else
    {
        
textarea.value += text;
        
textarea.focus(textarea.value.length 1);
    }


Espero te sirva, si queres enviame un mensaje personal y nos contactamos ya que yo tambien ando en la misma. Saludos
__________________
Dios es la unica fuente de todo bien.
  #5 (permalink)  
Antiguo 29/01/2008, 20:23
Avatar de Panino5001
Me alejo de Omelas
 
Fecha de Ingreso: mayo-2004
Ubicación: -34.637167,-58.462984
Mensajes: 5.148
Antigüedad: 20 años
Puntos: 834
Re: Capturar texto seleccionado en un textarea

En la faq 244 se explica cómo hacerlo y que funcione en todos los navegadores modernos (y en los antiguos que agregue el texto al final del textarea)
  #6 (permalink)  
Antiguo 30/01/2008, 15:33
Avatar de ASCENDEDMASTERS  
Fecha de Ingreso: julio-2005
Ubicación: Pergamino, Buenos Aires
Mensajes: 302
Antigüedad: 18 años, 10 meses
Puntos: 1
Re: Capturar texto seleccionado en un textarea

Cita:
Iniciado por Panino5001 Ver Mensaje
En la faq 244 se explica cómo hacerlo y que funcione en todos los navegadores modernos (y en los antiguos que agregue el texto al final del textarea)

Gracias Panino5001
__________________
Dios es la unica fuente de todo bien.
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 20:45.