2010-08-05 2 views
7

J'essaie d'obtenir seulement la partie sélectionnée d'une chaîne d'entrée qui a été sélectionnée par l'utilisateur. Disons que j'ai cette entrée:Puis-je récupérer le texte sélectionné par l'utilisateur dans une entrée de formulaire texte?

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

Et l'utilisateur sélectionne le mot « Enter » en cliquant et en faisant glisser dans le champ de texte. Puis-je récupérer ce texte avec jQuery?

Je sais que je peux obtenir toute la valeur de cette façon:

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

Mais jusqu'à présent, je ne trouve pas de toute façon d'obtenir seulement la partie sélectionnée « Entrée ». Quelqu'un peut-il me diriger dans la bonne direction? Merci!

EDIT

J'ai essayé document.getSelection et cela fonctionne bien dans Firefox sur un élément de texte statique comme un « p ». Cela ne fonctionne pas pour moi jusqu'à présent sur une entrée de texte.

Dans IE, window.selection.createRange(). Text fonctionne à la fois sur un "p" et dans une entrée de texte.

+0

Peut-être en utilisant http://www.quirksmode.org/dom/range_intro.html? – Adam

Répondre

1

Ok, voici la réponse finale. On dirait que nous devons utiliser selectionStart et selectionEnd au lieu de getSelection() quand nous travaillons avec inputar ou textarea. Voici mon code de test:

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

Et mon code HTML est simplement:

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

Je l'ai finalement obtenu. Merci pour la contribution de tout le monde!

2

This pourrait aider. Vous devrez utiliser la fonction .select().

+0

Cela ne l'aidera pas à obtenir le texte sélectionné. –

1

Vous pouvez utiliser la méthode de remplacement javascript habituelle.

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

Voir un exemple: http://jsfiddle.net/gezDF/

Cependant, une autre option pourrait être de supprimer le texte lorsque l'utilisateur est entré dans le champ. Cela peut se faire avec quelque chose comme ce qui suit:

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

Voir un exemple: http://jsfiddle.net/JNmAF/

+0

Votre solution va vider le champ lorsque l'utilisateur clique dessus. J'essaie d'obtenir le texte qui est sélectionné dans le champ, ne pas rendre le champ vide quand il est sélectionné. – Gabriel

+0

La première solution fera ce que vous avez demandé (j'ai ajouté un exemple). La seconde était une autre option qui pourrait résoudre le problème d'une manière différente. Je suppose que le "Entrez votre nom" est un texte pour aider l'utilisateur à comprendre ce que le champ est pour.Si tel est le cas, la suppression de ce texte lorsque l'utilisateur entre dans le champ éliminera le besoin d'analyser le texte "Entrez votre nom" hors du champ. – sgriffinusa

3

devrait être en mesure de le faire en utilisant la fonction de sélection de jQuery et document.getSelection

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

+0

document.getSelection semble être un pas dans la bonne direction, mais apparemment, il ne fonctionne pas dans IE. Savez-vous s'il y a un moyen de le faire fonctionner là aussi? – Gabriel

+0

@Gabriel try window.getSelection() ou document.selection.createRange(). Text pour IE, l'un ou l'autre devrait fonctionner je pense – heisenberg

+0

Comme je l'ai écrit dans mon édition, la version d'IE avec le texte de createRange(). Avez-vous une idée de la raison pour laquelle la version de Firefox ne fonctionne pas lorsque le texte sélectionné est dans une zone de saisie? Merci! – Gabriel

Questions connexes