2010-08-05 12 views
7

estoy tratando de obtener sólo la parte seleccionada de una cadena de entrada que fue seleccionada por el usuario. Vamos a decir que tengo esta entrada:¿Puedo recuperar el texto seleccionado por el usuario en una entrada de formulario de texto?

<input type="text" name="first_name" id="first_name" value="Enter your name" /> 

y el usuario selecciona la palabra "Enter" haciendo clic y arrastrando en el campo de texto. ¿Puedo recuperar ese texto con jQuery?

Sé que puedo obtener todo el valor de la siguiente manera:

$("#first_name").val(); 

Pero hasta ahora, no he encontrado de todos modos para obtener sólo la parte seleccionada "Enter". ¿Alguien puede señalarme en la dirección correcta? ¡Gracias!

EDITAR

me trataron document.getSelection y está funcionando muy bien en Firefox en un elemento de texto estático, como una "p". Hasta ahora no me funciona con una entrada de texto.

En IE, window.selection.createRange(). Texto está trabajando tanto en una "p" y en una entrada de texto.

+0

Tal vez usando http://www.quirksmode.org/dom/range_intro.html? – Adam

Respuesta

1

Ok, esta es la respuesta final. Parece que tenemos que utilizar selectionStart y selectionEnd en lugar de GetSelection() cuando estamos trabajando con la entrada o área de texto. Aquí está mi código de prueba:

$(".name").mouseup(function() 
{ 
    var selected_text = ""; 
    if (window.getSelection) // Firefox 
    { 
     var text = $(this).val(); 
     selected_text = text.substring(document.activeElement.selectionStart, document.activeElement.selectionEnd); 
    } 
    else // IE 
    { 
     selected_text = document.selection.createRange().text; 
    } 
    alert(selected_text); 
}); 

Y mi HTML es simplemente:

<input type="text" name="name" class="name" value="Enter your name" /> 

Así que finalmente lo consiguió. Gracias por la participación de todos!

2

This podría ayudar. Tendrá que usar la función .select().

+0

Sin embargo, eso no lo ayudará a obtener el texto seleccionado. –

1

podría utilizar el Javascript regular de reemplazar método.

$("#first_name").val().replace("Enter your name", "") 

ver un ejemplo: http://jsfiddle.net/gezDF/

Sin embargo, otra opción podría ser la de eliminar el texto cuando el usuario entra en el campo. Esto se puede hacer con algo como lo siguiente:

$(document).ready(function(){ 
    $("#first_name").focus(function() { 
     $(this).val(""); 
    }); 
}​);​ 

ver un ejemplo: http://jsfiddle.net/JNmAF/

+0

Su solución vaciará el campo cuando el usuario haga clic en él. Estoy tratando de obtener el texto que se selecciona en el campo, no dejar el campo vacío cuando se selecciona. – Gabriel

+0

La primera solución hará lo que usted solicitó (agregué un ejemplo). El segundo fue otra opción que puede resolver el problema de una manera diferente. Asumo que "Ingrese su nombre" es texto para ayudar al usuario a entender para qué sirve el campo.Si este es el caso, eliminar ese texto cuando el usuario ingresa al campo eliminará la necesidad de analizar el texto "Ingrese su nombre" fuera del campo. – sgriffinusa

3

debe ser capaz de hacer esto utilizando la función de selección de jQuery y document.getSelection

http://www.devguru.com/Technologies/ecmascript/quickref/doc_getselection.html http://api.jquery.com/select/

+0

document.getSelection parece ser un paso en el camino correcto, pero aparentemente no funciona en IE. ¿Sabes si hay una manera de hacerlo funcionar allí también? – Gabriel

+0

@Gabriel pruebe window.getSelection() o document.selection.createRange(). Texto para IE, uno u otro debería funcionar Creo – heisenberg

+0

Como escribí en mi edición, la versión de IE con createRange(). El texto está funcionando. ¿Tiene alguna idea de por qué la versión de Firefox no funciona cuando el texto seleccionado está en un cuadro de entrada? ¡Gracias! – Gabriel

Cuestiones relacionadas