2009-05-10 7 views
3

Plusieurs années auparavant, j'ai ajouté "smart quoting" à un forum Web. Fondamentalement, l'utilisateur sélectionne une partie dans la conversation précédente et clique sur un bouton pour le citer. Script obtient le code HTML de la citation et monte l'arbre DOM pour savoir qui a dit cela.Comment obtenir la sélection HTML et le parent de sélection?

Je ne pouvais le faire que pour IE, même si je me souviens avoir essayé dur. Mais alors, il n'y avait pas de stackoverflow.com et Firefox n'était pas aussi mature. Je suppose que maintenant, le faire dans Firefox est aussi facile. Voici la partie clé du code.

range2Copy = frameDoc.selection.createRange(); 
html2Copy = range2Copy.htmlText; 

el = range2Copy.parentElement(); 

// go up the HTML tree until post row node (id=postrowNNNN) 

while (el.nodeName != 'BODY' && 
     !el.id.match(/postrow/)) { 

    el = el.parentNode; 
} 

L'élément frameDoc contient le thread précédent dans lequel l'utilisateur sélectionne le texte. Si cela n'a pas beaucoup de sens, voir le code entier here. C'est un plugin pour FCKeditor.

+0

Il semble que vous avez déjà un code de travail. Je ne comprends pas le problème que vous avez –

Répondre

5

OK, j'ai essayé d'exécuter votre code dans Firefox et il n'a pas fonctionné, c'est la version modifiée qui a fonctionné:

var selection = window.getSelection(); 
var node = selection.anchorNode; 

while (node.nodeName != 'BODY' && !node.id.match(/postrow/)){ 
    node = node.parentNode; 
} 
+0

Merci, Nadia. Je me suis souvenu de ce problème non résolu après avoir lu votre réponse récente à [cette question] (http://stackoverflow.com/questions/845390/javascript-to-get-paragraph-of-selected-text-in-web-page/845398 # 845398). Mon problème principal est dans createRange/htmlText qui est la seule technologie IE. –

+0

Oui, la documentation sur ceci est à https://developer.mozilla.org/en/nsISelection –

+0

Dites-vous que la méthode htmlText est maintenant supportée par Mozilla? Ce n'est pas dans le document lié ci-dessus. –

Questions connexes