IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JavaScript Discussion :

sélection avec l'objet DOM:Range


Sujet :

JavaScript

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut sélection avec l'objet DOM:Range
    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);
       }
    }

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Donc personne n'a rencontré de tels problèmes?

    Je commence à croire que les fonctions built-in permettant de générer du RTF ont encore grand besoin d'amélioration...

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    31
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 31
    Points : 34
    Points
    34
    Par défaut
    Bon eh bien jamais aussi bien servi que par soi-même.

    Avis aux intéressés...

    La méthode commonAncestorContainer() de la classe d'objets Range m'a permis de faire exactement ce que je voulais.

    Merci quand même!

  4. #4
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par freekind
    La méthode commonAncestorContainer() de la classe d'objets Range m'a permis de faire exactement ce que je voulais.
    Salut, ça m'interesse à fond. si tu pouvais me montrer ton script, ça serait excellent. je bloque exactement au meme endroit que toi.
    cordialement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec un objet Range
    Par MagicJambond dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 12/08/2014, 12h33
  2. Réponses: 3
    Dernier message: 11/12/2007, 11h10
  3. Detecter le poids d'une image avec l'objet DOM
    Par crimsonPhantom dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 21/07/2006, 16h54
  4. [FLASH MX] Problème avec l'objet Date
    Par n_tony dans le forum Flash
    Réponses: 13
    Dernier message: 22/03/2005, 13h44
  5. Animations avec différents objet
    Par Mathieu.J dans le forum OpenGL
    Réponses: 6
    Dernier message: 09/06/2004, 14h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo