2009-08-06 5 views
2

NOTE: Résolu mon propre problème, il semble. Voir les modifications. J'essaie d'écrire un script greasemonkey qui mettra en évidence tous les textes correspondants sur la page lorsque l'utilisateur sélectionne un texte, puis supprime la mise en évidence lorsque la sélection est annulée. Je suis à la recherche d'un moyen jQuery de le faire. Il semble qu'il y ait un événement select dans le noyau jQuery, mais je ne pouvais pas le faire fonctionner comme je le voulais. Essayez d'exécuter ce qui suit sur cette page par exemple:Comment attacher l'événement "select" à chaque nœud de texte sur la page? Y a-t-il un meilleur moyen?

$(document).select(function() { 
     console.log("hey"); 
    }); 

Il n'y a pas de réponse. Il semble donc que je doive attacher ceci aux nœuds de texte en particulier. Mais cela ne me semble pas pratique. Ce serait trop lent.

Des idées, des idées? Merci.

EDIT # 1: Ken Browning a souligné que l'événement select de jQuery se déclenche uniquement dans les zones de texte et de saisie. Donc je suppose que je dois abandonner ça. Peut-être que je peux changer légèrement ma question, et demander si quelqu'un peut me dire la manière javascript de lier les événements de sélection à tous les nœuds de texte.

EDIT # 2: Je pense avoir trouvé une partie de ma réponse. Cela renvoie le texte sélectionné sur la page, mais vous devez toujours cliquer sur un bouton pour l'afficher. Il n'y a pas de liaison d'événement select. Hm.

<script language=javascript> 
function getSelText() 
{ 
    var txt = ''; 
    if (window.getSelection) 
    { 
     txt = window.getSelection(); 
      } 
    else if (document.getSelection) 
    {//javascript select event 
     txt = document.getSelection(); 
      } 
    else if (document.selection) 
    { 
     txt = document.selection.createRange().text; 
      } 
    else return; 
document.aform.selectedtext.value = txt; 
} 
</script> 
<input type="button" value="Get selection" onmousedown="getSelText()"> 

http://www.codetoad.com/javascript_get_selected_text.asp

EDIT # 3: SO Je lié à l'événement mouseup plutôt que de sélection. Je vérifie alors la valeur de getSelText() pour aller plus loin après ce point. Yay! EDIT # 4: Au cas où quelqu'un serait curieux, j'ai posté mon script terminé sur Userscripts. Voici le lien. Prendre plaisir!

http://userscripts.org/scripts/show/55148

Répondre

3

Dans Firefox, document.getSelection() renverra le texte sélectionné.

Vous pouvez associer un gestionnaire onmouseup au document et vérifier la sélection chaque fois que vous recevez un événement mouseup.

Remarque: Après avoir écrit ceci, vous avez affiché du code source pour obtenir la sélection. Alors que ce code est bien (et cross-browser), si vous utilisez Greasemonkey vous devez être sur Firefox, donc tout ce dont vous avez besoin est document.getSelection().

+0

génial. Merci pour le commentaire informatif. – picardo

+0

if (document.selection && document.selection.createRange) selectText = document.selection.createRange(). Text; // IE - pas que ce soit nécessaire pour greasemonkey, mais pourrait être utile – gnarf

1

Les sélectionner événement se déclenche lorsqu'un utilisateur sélectionne un texte dans un champ de texte, y compris l'entrée et textarea.

je lis que, pour signifier que vous avez le mauvais événement, sauf si le contenu de votre page sont dans un <input type="text"> ou un <textarea>

+0

ah. Je n'ai pas remarqué ça. Merci. – picardo

Questions connexes