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 :

Comment trouver le chemin de l’élément (balises) dans lequel se trouve le curseur ?


Sujet :

JavaScript

  1. #1
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut Comment trouver le chemin de l’élément (balises) dans lequel se trouve le curseur ?
    Salut,

    Je crois que c'est difficile mais je pose quand même la question : Comment trouver le chemin de l’élément (balises) dans lequel se trouve le curseur ?

    Je m'explique, supposons que j'ai ce source code affiché par exemple dans un textarea ou un élément éditable :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <html>
    <head>...</head>
    <body>
        <div>...</div>
        <div>...</div>
        <div>
            <h1>Un titre h1...</h1>
            <p>Un paragraphe p0...</p>
            <p>Un deuxième|paragraphe p1...</p>
            <p>Un troisième paragraphe p2...</p>
        </div>
    </body>
    </html>
    et que le curseur texte (en rouge) soit placé à l'intérieur du deuxième paragraphe eh bien j'aimerais obtenir le chemin de cet élément genre comme ceci :

    html > body > div[2] > p[1]

    Et si possible avoir l'offset (position à l'intérieur de l’élément en nombre de caractères).

    C'est peut-être impossible ou du moins difficile mais je pose la question quand même pour voir...

    Merci.

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Il est facile de savoir sur quel élément tu es, à partir de là, utiliser des parentNode() jusqu'à ce qu'on atteigne le haut de l'arborescence est tout aussi simple.
    En revanche, connaitre l'offset est plus délicat, il faut manier les objets Range en tenant compte des différences entre IE et les navigateurs.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Merci.

    Oui effectivement c'est plus facile si il s'agit d'une page html affichée dans un navigateur, dans ce cas on peut utiliser parentNodes() comme tu dis ou autres propriétés. Ceci dit en faisant cela on n'aura pas les indices, c'est-à-dire on n'aura par exemple ceci : html > body > div > p et non ceci : html > body > div[2] > p[1] or je crois que seul le chemin avec indices correspond à un seul élément alors que celui sans indices peut correspondre à plusieurs éléments.

    De toute façon j'ai vu comment on pouvait faire ça lorsque la page html est affichée dans un navigateur mais moi je parlais dans le cas où on a affaire au code source affiché dans un éditeur (par exemple dans un textarea ou un élément éditable).

    Dans ce cas c'est plus difficile car on a pas la possibilité d'utiliser parentNodes(), childNodes()...

    En fait je crois que ça revient à parser sois-même le code...

  4. #4
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    facile avec mouseover/mousemove et e.clientX/Y / e.target : http://jsfiddle.net/t19Lstp7/
    One Web to rule them all

  5. #5
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Sylvain, ta méthode ne permet pas de connaitre le rang de la balise survolée par rapport à son type et son parent.

    Il faut remonter d'un cran et lister tous les éléments de même nature :
    http://jsfiddle.net/t19Lstp7/1/
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  6. #6
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    Ça c'était l'étape suivante, mais il faut bien laisser les gens bosser un peu
    One Web to rule them all

  7. #7
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 418
    Points
    91 418
    Billets dans le blog
    20
    Par défaut
    Il lui reste encore le TP final : trouver le chemin complet.
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  8. #8
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Merci pour vos réponses. Comme je disais si il s'agit d'une page html affichée dans un navigateur ou autre j'ai vu comment on pouvait faire ça et d'ailleurs pour ceux que cela intéresserait voici un exemple de mise en œuvre (qui affiche aussi les identifiants) : http://jsfiddle.net/zwng948j (c'est une adaptation, la fonction la plus importante n'est pas de moi).


    Mais en fait je parlais dans le cas où on a affaire au code source affiché dans un éditeur (par exemple dans un textarea ou un élément éditable). Dans ce cas c'est plus difficile car on a pas la possibilité d'utiliser parentNodes(), childNodes()... En fait je crois que ça revient à parser sois-même le code...

    Et pour l'offset, là aussi ce que je demande est plus difficile car je parlais de la position à l'intérieur de l’élément en nombre de caractères et non en pixel. Pour ça il faudra peut-être utiliser les objets Range comme le disait Bovino.

    Je ne sais pas si je suis clair...

  9. #9
    Rédacteur/Modérateur

    Avatar de SylvainPV
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    3 375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 3 375
    Points : 9 944
    Points
    9 944
    Par défaut
    En fait tu veux coder ton propre éditeur c'est ça ? Si c'est le cas en effet ils ont leur propres mécanismes de parsing. Leur fonctionnement est bien trop complexe pour qu'on puisse te répondre en quelques lignes, le mieux c'est que tu t'inspires du code source de parseurs d'éditeurs existants ou d'outils de coloration syntaxique.
    One Web to rule them all

  10. #10
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    J'aimerais bien faire un mini éditeur en effet... Là j'aimerais faire la correspondance entre le code source et la page html affichée, c'est-à-dire si je clique sur un balise du code source cela met en évidence (surbrillance ou autre) la partie correspondante dans la page html affichée. Un peu comme l'inspecteur de Firebug ou autre...

    Ou comme Amaya :
    Pièce jointe 177836

    Je me suis dis si je peux avoir le chemin de la balise (à partir du code source) alors on pourra appliquer un style à cette balise pour la mettre en évidence.

  11. #11
    Membre expert
    Homme Profil pro
    Inscrit en
    Octobre 2011
    Messages
    2 873
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2011
    Messages : 2 873
    Points : 3 717
    Points
    3 717
    Par défaut
    Salut,

    Je viens de découvrir qu'il y a des parsers natif comme : https://developer.mozilla.org/en-US/.../API/DOMParser

    J'ai testé mais le problème c'est que le code html ne doit pas contenir d'erreur sinon il bloque...

    Et aussi il adapte le code dans certains cas comme les navigateurs, par exemple si il y a une <div> dans un <p> il l'a sort du <p>...

    Mais l'adaptation n'est pas aussi poussé que dans les navigateurs...
    Tant mieux peut-être car parfois l'adaptation est trés différente de ce qu'on voulait...

Discussions similaires

  1. Réponses: 0
    Dernier message: 27/05/2015, 11h48
  2. Comment trouver le chemin d'un fichier
    Par melisse dans le forum Langage
    Réponses: 4
    Dernier message: 16/01/2007, 15h43
  3. comment trouver le chemin de project?
    Par mechatikhaled dans le forum Débuter
    Réponses: 5
    Dernier message: 08/02/2006, 10h54
  4. Comment trouver le chemin du bureau ou desktop
    Par G.STEVENS dans le forum Windows
    Réponses: 2
    Dernier message: 29/08/2005, 18h21
  5. Comment subsituer un chemin par un autre dans un réseau ?
    Par Baillard dans le forum Développement
    Réponses: 3
    Dernier message: 11/08/2002, 14h01

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