2010-08-05 16 views
7

Sto cercando di ottenere solo la parte selezionata di una stringa di input che è stata selezionata dall'utente. Diciamo che ho questo ingresso:Posso recuperare il testo selezionato dall'utente in un input di testo?

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

E l'utente seleziona la parola "Invio" cliccando e trascinando nel campo di testo. Posso recuperare quel testo con jQuery?

so di poter ottenere l'intero valore in questo modo:

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

Ma finora, non ho trovato in ogni caso per ottenere solo la parte selezionata "Invio". Qualcuno è in grado di indicarmi la giusta direzione? Grazie!

EDIT

ho provato document.getSelection e sta lavorando molto in Firefox su un elemento di testo statico come ad esempio una "p". Non funziona per me finora con un input di testo.

In IE, window.selection.createRange(). Text funziona sia su una "p" che in un input di testo.

+0

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

risposta

1

Ok ecco la risposta finale. Sembra che dobbiamo usare selectionStart e selectionEnd invece di getSelection() quando stiamo lavorando con input o textarea. Ecco il mio codice di prova:

$(".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); 
}); 

E il mio HTML è semplice:

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

Così ho finalmente capito. Grazie per l'input di tutti!

2

This potrebbe aiutare. Dovrai utilizzare la funzione .select().

+0

Questo non lo aiuterà comunque a ottenere il testo selezionato. –

1

È possibile utilizzare il normale metodo di sostituzione javascript.

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

vedere un esempio: http://jsfiddle.net/gezDF/

Tuttavia, un'altra opzione potrebbe essere quella di rimuovere il testo quando l'utente entra nel campo. Questo può essere fatto con qualcosa di simile al seguente:

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

vedere un esempio: http://jsfiddle.net/JNmAF/

+0

La soluzione svuota il campo quando l'utente fa clic su di esso. Sto cercando di ottenere il testo che è selezionato nel campo, non rendere il campo vuoto quando è selezionato. – Gabriel

+0

La prima soluzione farà ciò che hai chiesto (ho aggiunto un esempio). Il secondo era un'altra opzione che può risolvere il problema in un modo diverso. Presumo che "Inserisci il tuo nome" sia un testo che aiuti l'utente a capire a cosa serve il campo.In tal caso, rimuovendo quel testo quando l'utente entra nel campo eliminerà la necessità di analizzare il testo "Inserisci il tuo nome" fuori dal campo. – sgriffinusa

3

dovrebbero essere in grado di farlo usando la funzione di selezione di jQuery e document.getSelection

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

+0

document.getSelection sembra essere un passo nel modo giusto, ma a quanto pare non funziona in IE. Sai se c'è un modo per farlo funzionare anche lì? – Gabriel

+0

@Gabriel prova window.getSelection() o document.selection.createRange(). Text per IE, l'uno o l'altro dovrebbe funzionare credo – heisenberg

+0

Come ho scritto nella mia modifica, la versione di IE con createRange(). Il testo funziona. Hai idea del motivo per cui la versione di Firefox non funziona quando il testo selezionato si trova in una casella di input? Grazie! – Gabriel

Problemi correlati