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 :

Surlignage par passage de souris


Sujet :

JavaScript

  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut Surlignage par passage de souris
    Bonjour,

    Je suis débutante en javascript donc soyez tolérants d'il vous plait

    Ma page est composée de deux division. La première contient un tableau avec des mot clés tandis que la seconde contient un texte (ce dernier contenant les mots clés en question).

    Je souhaite que lorsque je passe la souris sur un mot clé du tableau, ledit mot clé soit surligné dans le texte.

    J'ai déjà trouvé du code qui me semble exploitable :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function surbrillance(ou,quoi){
    	var StrReg="("+quoi+")";
    	var Reg=new RegExp((StrReg),"gi")
    	ou.innerHTML= ou.innerHTML.replace(Reg,'<span style="background-color:#53C5FE;">$1</span>')
    }
    Le problème, c'est que je ne sais pas comment écrire qu'il ne faut surligner le mot contenu dans la balise td (id=tableMot) dans le texte contenu dans une division (id=texteDoc) seulement au passage de la souris sur la balise td citée ci-dessus.

    Voilà, j'espère m'être exprimée clairement. Merci !

  2. #2
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Admettons que ton tableau de mot clef ressemble à ça :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <table>
      <tr><td>mot clef 1</td></tr>
      <tr><td>mot clef 2</td></tr>
    </table>

    Il sufft dans ce cas de rajouter un appel vers ta fonction surbrillance (qu'il faudra un peu modifier) dans un événement onmouseover :
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <table>
      <tr><td onmouseover="surbrillance('mot_clef_1')">mot_clef_1</td></tr>
      <tr><td onmouseover="surbrillance('mot_clef_2')">mot_clef_2</td></tr>
    </table>

    Par contre on ne peut pas lui passer l'argument "ou" de ta fonction surbrillance, il faudra que tu te débrouilles pour le récupérer autrement (on peut passer en argument un ID par exemple).

  3. #3
    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
    Par défaut
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <table id="motsCles">
      <tr><td>mot_clef_1</td></tr>
      <tr><td>mot_clef_2</td></tr>
    </table>
     
    <p id="texte">
    Texte avec mot_clef_1 à surligner
    </p>

    Code js : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    var motsCles = document.querySelectorAll("#motsCles td");
    var texte = document.getElementById("texte");
    var texteInitial = texte.innerHTML;
     
    for(var m=0; m<motsCles.length; m++){
        (function(motCle){
                motCle.addEventListener("mouseover", function(){
                   surbrillance(texte, motCle.innerText);
                });
                 motCle.addEventListener("mouseout", function(){
                   texte.innerHTML = texteInitial;
                });
        })(motsCles[m]);
    }
     
    function surbrillance(ou,quoi){
    	var StrReg="("+quoi+")";
    	var Reg=new RegExp((StrReg),"gi")
    	ou.innerHTML= ou.innerHTML.replace(Reg,'<span style="background-color:#53C5FE;">$1</span>')
    }

    Code non testé, mais l'idée est là.

    edit: testé et débuggé :
    http://jsfiddle.net/2ANhQ/

  4. #4
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Merci beaucoup a tout les deux =)

    J'ai rencontré un second bug, je test ce que vous m'avez dis dés que j'ai finis !

  5. #5
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Impeccable !! ='D

    Merci beaucoup, ça marche du tonnerre !! Bonne journée !!

  6. #6
    Expert confirmé
    Avatar de hackoofr
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2009
    Messages
    3 844
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Juin 2009
    Messages : 3 844

  7. #7
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 56
    Par défaut
    Merci, à vrai dire j'ai un dernier petit problème mais je ne sais pas si on peut y faire grand chose... FireFox ne supporte visiblement pas la fonction javascript (c'est moche à dire mais ça marche sous IE...) ^^"

  8. #8
    Membre émérite Avatar de Geoffrey74
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mars 2007
    Messages
    515
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2007
    Messages : 515
    Par défaut
    je pense que le soucis vient de innerHTML qui ne fonctionne que sous IE.

  9. #9
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 213
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 213
    Par défaut
    Bonjour,
    Citation Envoyé par Geoffrey74 Voir le message
    je pense que le soucis vient de innerHTML qui ne fonctionne que sous IE.
    c'est bel et bien crossBrowser

  10. #10
    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
    Par défaut
    Citation Envoyé par CheepCheep Voir le message
    Merci, à vrai dire j'ai un dernier petit problème mais je ne sais pas si on peut y faire grand chose... FireFox ne supporte visiblement pas la fonction javascript (c'est moche à dire mais ça marche sous IE...) ^^"
    Oui pardon, ça vient de innerText.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    surbrillance(texte, motCle.innerText || motCle.textContent);
    Ca devrait fonctionner partout maintenant.
    http://jsfiddle.net/2ANhQ/1/

  11. #11
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ceci dit, le mieux est de se passer de innerHTML et innerText et d'utiliser les objets DOM pour ça.

    C'est un peu plus long à écrire mais c'est pas la mer à boire non plus (même si dans le cas présent ça peut être un peu complexe). Ou alors passer par du jQuery.

  12. #12
    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
    Par défaut
    Dans le cas présent, on manipule des bouts de texte et non des éléments HTML. L'utilisation de innerText et innerHTML me paraît donc appropriée. Et jQuery n'apporterait pas grand chose au problème.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 05/02/2007, 22h11
  2. [IMAGE] changement d'image lors d'un passage de souris
    Par gailup dans le forum Balisage (X)HTML et validation W3C
    Réponses: 8
    Dernier message: 02/06/2006, 10h18
  3. [MySQL] mise à jour de champs par passage de paramètre
    Par cams dans le forum PHP & Base de données
    Réponses: 31
    Dernier message: 02/12/2005, 15h20
  4. Masquer une forme lors du passage de souris
    Par gilles641 dans le forum Langage
    Réponses: 7
    Dernier message: 15/07/2005, 17h07
  5. Selection par clic de souris
    Par bilbonec dans le forum OpenGL
    Réponses: 7
    Dernier message: 16/04/2004, 00h25

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