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 :

transformer des mots clef en lien en JS


Sujet :

JavaScript

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut transformer des mots clef en lien en JS
    Bonjour,

    je cherche à mettre en place un système un peu particulier qui existe sur le web, mais développé par des sociétés commerciales (je le fais pour une assoc qui cherche à dynamiser l'interface de son site web à l'aide d'un glossaire automatique) :
    le javascript parse un texte affiché à l'écran, reconnait certains mots clef et les transforme en lien qui affichera la définition du mot en infobulle.

    j'ai trouvé dans les sources Javascript de Développez.com comment afficher l'infobulle sur une balise HTML (http://javascript.developpez.com/sou...=tips#infopage), mais pas comment ajouter le lien à mon mot clef.

    merci de votre aide à tous !

    ex de fonctionnement :
    site igeneration (http://www.igeneration.fr/fr/actu/6144/ : le mot clef photo n'est pas un lien à la base, mais un javascript le transforme en lien)

    Nicolas.
    Nico, l'agrotic géomatic

  2. #2
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 134
    Points
    134
    Par défaut
    Est ce que tu as déjà une association "mot" => "lien" de faite?

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    pour le moment, j'ai la fonction suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function AddLink(pElementID, pKeyword, pLinkHTMLBody){
    	var pOrigine = document.getElementById(pElementID).innerHTML; 
    	var reg=new RegExp("("+pKeyword+")", "g");
    	var pNew = pOrigine.replace(reg,"<a href='#' class='GlossLink'>$1</a>");
    	document.getElementById(pElementID).innerHTML = pNew;
    }
    qui transforme le texte en lien, sauf que j'ai du mal à ne sélectionner que les mots complets et pas les mots 'commençant par' ...
    je sais, je suis un novice en regexp...
    Nico, l'agrotic géomatic

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    regarde du coté de \w et \b dasn la regExp
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  6. #6
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 134
    Points
    134
    Par défaut
    Si tu veux pas un mot "commençant par", remplace ton mot suivi d'une ponctuation

    au lieu de remplacer (mot), remplace mot[ |\?|\.|,etcetc]

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par MeDioN Voir le message
    Si tu veux pas un mot "commençant par", remplace ton mot suivi d'une ponctuation

    au lieu de remplacer (mot), remplace mot[ |\?|\.|,etcetc]
    pas pratique comme solution ...

    le \b non plus... le regexp ne marche plus avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    function AddLink(pElementID, pKeyword, pLinkHTMLBody){
    	var pOrigine = document.getElementById(pElementID).innerHTML; 
    	var reg=new RegExp('(\b'+pKeyword+'\b)', 'gi');
    	var pNew = pOrigine.replace(reg,'<a href="#" class="GlossLink" onmouseover="Tooltip(\'' + pLinkHTMLBody + '\');">$1</a>');
    	document.getElementById(pElementID).innerHTML = pNew;
    }
    et je n'arrive pas à exclure les mots qui sont dans des tags...
    je ne suis vraiment pas doué...
    Nico, l'agrotic géomatic

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    en plus, j'essaye de récupérer le numéro d'ordre du remplacement effectué pour donner un id au lien généré :
    je vise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <a href="#" id="tooltip[id]" onMouseOver="tooltip('tooltip[id]', '[HTML]')">[mot clef]</a>
    la fonction tooltip(pLinkID, pHTML) permettant d'afficher l'infobulle au niveau du lien dont l'ID est connu ; infobulle contenant le code HTML voulu.

    merci à tous.
    Nicolas.
    Nico, l'agrotic géomatic

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    je progresse :
    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
    16
    17
     
    function AddLink(pElementID, pKeyword, pLinkHTMLBody){
    	var pOrigine = document.getElementById(pElementID).innerHTML; 
    	if(1==2){
    		var reg=new RegExp('('+pKeyword+')', 'gi');
    		var pNew = pOrigine.replace(reg,'<a href="javascript:void(null)" class="GlossLink" id="tooltip_'+pKeyword+'" onMouseOver="Tooltip(\'tooltip_'+pKeyword+'\', \'<div class=tooltip_content>' + pLinkHTMLBody + '</div>\');">$1</a>');
    	} else {
    		var pNew = '';
    		var LinkID = 'tooltip_'+pKeyword;
    		var reg=new RegExp('('+pKeyword+')', 'gi');
    		var RegTab = pOrigine.split(reg);
    		for(i=0; i<RegTab.length; i++){
    			pNew += RegTab[i].replace(pKeyword, '<a href="javascript:void(null)" class="GlossLink" id="'+LinkID+i+'" onmouseover="Tooltip(\''+LinkID+i+'\', \'<div class=tooltip_content>' + pLinkHTMLBody + '</div>\');">'+pKeyword+'</a>');
    		}
    	}
    	document.getElementById(pElementID).innerHTML = pNew;
    }
    sauf que la méthode utilisée me supprime carrément les mots recherchés sous IE : RegTab[i].replace m'efface le mot clef
    alors que le pOrigine.Replace(reg ...) fonctionne bien (mais ne permet de jouer avec le numéro d'ordre de l'élément en regExp) ...
    Nico, l'agrotic géomatic

  10. #10
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    utilise un test sur la regExp pour obtenir un tableu regExp ... et avoir l'ordre ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  11. #11
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    utilise un test sur la regExp pour obtenir un tableu regExp ... et avoir l'ordre ?
    c'est pour ça que je fais un split...
    mais IE et FF ne le gèrent pas de la même façon !!!!!
    la chaine recherchée est absente du tableau généré sous IE (le 7) alors qu'elle y est sous FF (le 3) !!!!!
    Nico, l'agrotic géomatic

  12. #12
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    pas un split un test ....
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  13. #13
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    pas un split un test ....
    test me dit si j'ai un match et me donne le numéro du caractère où commence le match. non ?
    quel rapport avec les tableaux ?
    Nico, l'agrotic géomatic

  14. #14
    Membre habitué
    Inscrit en
    Mai 2005
    Messages
    130
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 130
    Points : 134
    Points
    134
    Par défaut
    Nan, ça te ramène true ou false, encore pire...

  15. #15
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 637
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 637
    Points : 66 656
    Points
    66 656
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    var reg=new RegExp("(\b"+pKeyword+"\b)", "g");
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  16. #16
    Membre actif
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    202
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 202
    Points : 215
    Points
    215
    Par défaut
    Merci SpaceFrog,

    ainsi, je n'ai que le mot en lui-même, mais je ne l'ai qu'une seule fois, même s'il est présent plus souvent. est-ce normal ?

    sinon, pour gérer mon soucis sous IE, j'ai fait comme ceci :
    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
     
    function AddLink(pElementID, pKeyword, pLinkHTMLBody){
    	var pOrigine = document.getElementById(pElementID).innerHTML; 
    	var pNew = '';
    	var LinkID = 'tooltip_'+pKeyword;
    	var reg=new RegExp("(\b"+pKeyword+"\b)", "gi");
    	var RegTab = pOrigine.split(reg);
    	for(i=0; i<RegTab.length; i++){
    		if( (navigator.userAgent.toLowerCase().indexOf('msie') + 1)){
    			// navigateur IE
    			if(i != RegTab.length-1){
    				// pas le dernier élément du tableau, on ajoute le lien avec le mot-clef
    				pNew += RegTab[i] + '<a href="javascript:void(null)" class="GlossLink" id="'+LinkID+i+'" onmouseover="Tooltip(\''+LinkID+i+'\', \'<div class=tooltip_content>' + pLinkHTMLBody + '</div>\');">'+pKeyword+'</a>';
    			} else {
    				// dernier élément du tableau, on n'ajoute pas le lien avec le mot-clef
    				pNew += RegTab[i];
    			}
    		} else {
    			// pas IE
    			pNew += RegTab[i].replace(pKeyword, '<a href="javascript:void(null)" class="GlossLink" id="'+LinkID+i+'" onmouseover="Tooltip(\''+LinkID+i+'\', \'<div class=tooltip_content>' + pLinkHTMLBody + '</div>\');">'+pKeyword+'</a>');
    		}
    	}
    	document.getElementById(pElementID).innerHTML = pNew;
    }
    un horrible test ... mais qui fonctionne
    Nico, l'agrotic géomatic

Discussions similaires

  1. [WD-2010] renvoi / liens sur des mots-clefs
    Par Lili120 dans le forum Word
    Réponses: 2
    Dernier message: 06/01/2011, 20h12
  2. Ajouter des liens sur des mots clefs contenu dans une div
    Par Nementon dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 31/05/2010, 11h32
  3. Réponses: 14
    Dernier message: 25/10/2007, 15h00
  4. Liste des mots-clefs de MySQL
    Par EvilAngel dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 18/08/2006, 15h32

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