Bonjour,

Je suis pr�sentement en train de d�velopper un �diteur RTF et je rencontre un probl�me emb�tant de s�lection sous Mozilla. Voici mon objectif: lorsque je s�lectionne du texte (avec la souris ou le clavier), je souhaite capturer le HTML qui en d�coule, pas seulement le texte s�lectionn�. J'y arrive presque mais pour certains cas, je suis totalement en d�route!

Par exemple: j'ajoute un lien � mon RTF t.q.:
<a href="http://www.pagequelconque.com">test</a>

Lorsque je s�lectionne exactement le texte du lien ("test") ou que je s�lectionne une partie inclusive du texte ("te", "es", etc.), je r�cup�re ma s�lection au moyen de mon objet selection, et je cr�e mon range � l'aide de getRangeAt() et cloneRange(). Ensuite, j'utilise la m�thode cloneContents() pour obtenir le fragment s�lectionn� et toutes les nodes qui y sont inclues. Toutefois, le r�sultat est d�cevant: on dirait que ma s�lection ne consid�re pas la balise <a ... /> Ca me retourne un node de type Text et non un node A.

Si, toutefois, j'ajoute le texte suivant au devant de mon lien:

un test: <a href="http://www.pagequelconque.com">test</a>

et que je s�lectionne une partie du texte � l'ext�rieur de ma balise A, je r�ussirai � acc�der � mes deux nodes inclues dans ma s�lection, soit "Text" et "A" (probablement parce que je force la s�lection du lien.) Sinon, si je s�lectionne uniquement mon lien "test", on dirait que la s�lection ne prend pas en compte la balise...

Est-ce que quelqu'un a une piste de solution?
Merci beaucoup!

Extrait semblable � mon code:
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
function testRange() {
   // récupérer l'objet RTE
   var oRTE = document.getElementById(rte).contentWindow;
 
   // obtenir la sélection courante et créer le range
   var selection = oRTE.getSelection();
   var objRange = selection.getRangeAt(selection.rangeCount - 1).cloneRange();
 
   // obtenir l'objet DocumentFragment et vérifier ses nodes fils
   var objContents = objRange.cloneContents();
   for (var i = 0; i < objContents.childNodes.length; i++) {
      alert(i + ":" + objContents.childNodes[i].nodeName);
   }
}