2009-06-09 11 views
2

Je développe une extension Firefox, dans laquelle l'utilisateur sélectionne un texte, puis envoie ce texte à un service Web REST et ramène des résultats.Obtenir l'identifiant de noeud sélectionné

Mon problème avec la sélection de texte, je l'ai utilisé cette méthode pour obtenir le texte sélectionné:

var selectedText = window.getSelection(); 

Je suis le résultat dans la variable selectedText et l'envoyer au serveur, mais je ne sais pas comment pour obtenir l'Id de ce noeud ou n'importe quoi pour ajouter le résultat dedans.

Je l'ai essayé à la fois javascript et jQuery avec Firebug et beaucoup de requêtes de recherche Google, mais pas de résultat utile!

Répondre

2

Edit: Puisque vous en avez besoin pour une extension FF vous pouvez sauter toutes les fonctions pour IE et tout ce que vous devez faire est la suivante:

window.getSelection().getRangeAt(0).commonAncestorContainer 

Plus d'informations sur les plages: https://developer.mozilla.org/en/DOM/range


Il existe déjà une question similaire:

Get selected text and selected nodes on a page?

J'ai modifié les fonctions un peu:

<script type="text/javascript"> 
    function getTextSelection() { 
    if(document.selection) 
     return document.selection; 
    else if(window.getSelection) 
     return window.getSelection(); 
    else if(document.getSelection) 
     return document.getSelection(); 
    else 
     return false; 
    } 
    function getSelectionRange() { 
    var selection = getTextSelection(); 
    if(selection.getRangeAt) 
     return selection.getRangeAt(0); 
    else if (selection.createRange) 
     return selection.createRange(); 
    else 
     return false; 
    } 
    function getSelectionParent(r) { 
    if(r.parentElement) 
     return r.parentElement; 
    else if(r.commonAncestorContainer) 
     return r.commonAncestorContainer; 
    else 
     return false; 
    } 
</script> 

HTML:

<body> 
    <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p> 
    <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p> 
</body> 

Je l'ai testé ce genre de choses dans IE6,7 et FF3.0. A travaillé sans aucun problème. La seule chose que vous devez savoir est que IE contrairement à FF ignore les nœuds de texte.

Si vous voulez essayer par vous-même: http://dev.freedig.org/files/selection.html

+0

Je l'ai lu, il vous donne juste le texte sélectionné pas le noeud, ai-je tort? –

+0

Le dernier exemple de code obtient le noeud parent de la sélection de texte. Je l'ai ajouté à ma réponse. – slosd

+0

merci mais cela ne fonctionne pas non plus :(même dans le lien de démo il ne vous donne pas l'objet ou l'élément –

0

UTILISEZ CE

<script type="text/javascript"> 
    function getTextSelection() { 
    if(document.selection) 
     return document.selection; 
    else if(window.getSelection) 
     return window.getSelection(); 
    else if(document.getSelection) 
     return document.getSelection(); 
    else 
     return false; 
    } 
    function getSelectionRange() { 
    var selection = getTextSelection(); 
    if(selection.getRangeAt) 
     return selection.getRangeAt(0); 
    else if (selection.createRange) 
     return selection.createRange(); 
    else 
     return false; 
    } 
    function getSelectionParent(r) { 
    if(r.parentElement) 
     return r.parentElement; 
    else if(r.commonAncestorContainer) 
     return r.commonAncestorContainer; 
    else 
     return false; 
    } 
</script> 

HTML:

<body> 
    <p><em>This is just some random text. </em><strong>Select me and then click the button!!!</strong></p> 
    <p><input type="button" value="Parent element?" onclick="alert('The selection\'s parent element is: ' + getSelectionParent(getSelectionRange()).nodeName);" /></p> 
</body> 
Questions connexes