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 :

[JS] Remplacer les mots dans le code d'une page.


Sujet :

JavaScript

  1. #1
    Membre du Club Avatar de sansamis
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut [JS] Remplacer les mots dans le code d'une page.
    Salut les copains !

    Alors voila: je dois me contenter de XHTML et de JS pour des raisons assez tordues, et je dois faire ca:

    J'ai un code, 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
     
    <html>
     
    <head>
     
    </head>
     
    <body>
     
    Bienvenue [nom] !<br />
    <br />
    Tu as [age] ans [nom] =]<br />
    <br />
    Blablabla...
     
    </body>
     
    </html>
    Auquel je dois ajouter une fonction JS de facon à remplacer tous les [nom] de la page par Roger par exemple et tous les [age] par 31 par éxemple de facon à obtenir ca:

    Citation : ce qui devrait être afficher
    Bienvenue Roger !

    Tu as 31 ans Roger =]

    Blablabla...

    J'ai alors créé ca:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <script language="JavaScript">
    if (done=="")
    {
    code = document.documentElement.innerHTML;
    code = code.replace("[nom]","Roger");
    code = code.replace("[age]","31");
    done = 1;
    document.write(code);
    document.write("lol");
    }
    </script>
    A mettre entre <head> et </head>.

    On m'a dit que le code pouvait être récupéré dans une variable avec document.documentElement.innerHTML car le script demande le code de la page sur lequel il se trouve, ce qui ne fonctionnerait pas s'il cherchait le code d'une page étrangère.

    Il y a un truc avec "done" qui prend la valeur 1 de facon à le pas repeter la fonction lors du document.write, sinon cela fait une boucle infinie qui fait planter le navigateur.

    Mais hélas cela affiche [nom] et [age] comme si la fonction n'avait servi à rien :'(

    J'ai même mis le document.write("lol"); pour voir s'il s'affichait mais ca n'écrit pas de "lol"
    Edit: si je place le script JS après <body> au lieu d'après <head>, le "lol" s'écrit, mais le rest ne change toujours pas

    Quelqu'un autait-il une idée ?

    Merci d'avance,

    Edit2: J'ai essayé ca, completement autre chose, qui m'a parut super, mais toujours sans succès:

    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
    25
    26
    27
    28
    29
    30
     
    <html>
     
    <head>
     
    <script language="JavaScript">
    window.onload = pbo();
    function pbo()
    {
    code = document.getElementsByTagName("body").innerHTML;
    code = code.replace("'","\'");
    code = code.replace("[nom]","Roger");
    code = code.replace("[age]","31");
    document.getElementsByTagName("body").innerHTML = code;
    }
    </script>
     
    </head>
     
    <body>
     
    Bienvenue [nom] !<br />
    <br />
    Tu as [age] ans [nom] =]<br />
    <br />
    Blablabla...
     
    </body>
     
    </html>

  2. #2
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    Si tu fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    alert(document.getElementsByTagName("body").innerHTML);
    Un élément t'est-il bien renvoyé ? Si ce n'est pas le cas, essaye plutôt la fonction getElementById avec laquelle tu seras sûr de désigner un élément précis de ta page :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById("id_body").innerHTML
    avec au niveau de ton body
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  3. #3
    Membre du Club Avatar de sansamis
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Ca ne marche toujours pas, pas d'alerte, et rien non plus avec un id

  4. #4
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    J'ai vu que tu avais déjà essayé de l'appeler avec window.onload = pbo();, mais essaye d'appeler ta fonction JS dès le chargement de ta page comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <body id="id_body" onload="javascript:pbo();">
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  5. #5
    Membre du Club Avatar de sansamis
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    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
    25
    26
    27
    28
    29
    <html>
     
    <head>
     
    <script language="JavaScript">
    function pbo()
    {
    code = document.getElementById("id_body").innerHTML;
    code = code.replace("'","\'");
    code = code.replace("[nom]","Roger");
    code = code.replace("[age]","31");
    document.getElementById("id_body").innerHTML = code;
    }
    </script>
     
    </head>
     
    <body id="id_body" onload="javascript:pbo();">
     
    Bienvenue [nom] !<br />
    <br />
    Tu as [age] ans [nom] =]<br />
    <br />
     
    Blablabla...
     
    </body>
     
    </html>
    Rien...

  6. #6
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    String.replace() attend une expression reguliere comme premier argument, ce que tu passes sont des chaines. Peut etre que le navigateur en extrapole une expression reguliere mais il faut savoir que les crochets font partie de la syntaxe des expressions regulieres, ce qui fausserait tout.
    Pour que les remplacements se fassent pour chaque occurence de la recherche, il aurait aussi fallu inclure le flag "global" (g)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function pbo()
    {
    var code = document.body.innerHTML;
    code = code.replace(/\[nom\]/g, 'Roger');
    code = code.replace(/\[age\]/g, '31');
    document.body.innerHTML = code;
    }

  7. #7
    Membre actif Avatar de Chen norris
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    216
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 216
    Points : 248
    Points
    248
    Par défaut
    En passant par les expressions régulières, ça fonctionne :
    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
    25
    26
    27
    28
    29
    <html>
     
    <head>
     
    <script language="JavaScript">
    function pbo()
    {
    	code = document.getElementById("id_body").innerHTML;
    	code = code.replace("'","\'");
    	code = code.replace(/\[nom]/g,"Roger");
    	code = code.replace("[age]","31");
    	document.getElementById("id_body").innerHTML = code;
    }
    </script>
     
    </head>
     
    <body id="id_body" onload="javascript:pbo();">
     
    Bienvenue [nom] !<br />
    <br />
    Tu as [age] ans [nom] =]<br />
    <br />
     
    Blablabla...
     
    </body>
     
    </html>
    Chen norris
    C/C++, C#, Java, PHP & SQL coder
    Web developer

  8. #8
    Membre du Club Avatar de sansamis
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Merci à tous c'est nickel comme ca, mais maintenant mon autre problème est le suivant:

    Serait-ce possible d'avoir le même résultat sans passer par un id, si par éxemple je veux que quelqu'un mette mon code dans sa page simplement, sans rajouter un id="id_body" ? Comment faire ? J'ai essayé simplement en remplacent document.getElementById("id_body").innerHTML par document.getElementsByTagName("body") mais cela ne marche pas...

    Des idées ?

  9. #9
    Membre expérimenté
    Avatar de Gruik
    Profil pro
    Développeur Web
    Inscrit en
    Juillet 2003
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Juillet 2003
    Messages : 1 566
    Points : 1 727
    Points
    1 727
    Par défaut
    Comme je l'avais montré dans mon code, tu peux acceder au body avec la propriété "body" sur le "document", c'est une propriété standardisée par le DOM lvl1 et supporté par tout le monde (je pense, enfin IE et Momo ça marche)

  10. #10
    Membre du Club Avatar de sansamis
    Inscrit en
    Janvier 2007
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 71
    Points : 43
    Points
    43
    Par défaut
    Désolé gruik j'avais pas vu que tu avais aussi changé la ligne 3

    C'est paaarfait ! Merci à tous

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

Discussions similaires

  1. Ajout d'une image SVG dans le code d'une page
    Par Mobius dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 27/05/2009, 17h37
  2. remplacer un mot dans la formule d'une serie d'un histogramme
    Par Chloupe dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 19/08/2008, 16h30
  3. Remplacer un mot dans le code d’un userform
    Par modus57 dans le forum Macros et VBA Excel
    Réponses: 18
    Dernier message: 29/12/2007, 21h02
  4. Recherche d'un String dans le code d'une page
    Par MyWork dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 06/04/2007, 20h52
  5. [RegEx] motif pour remplacer un mot dans du code HTML ...
    Par r-zo dans le forum Langage
    Réponses: 6
    Dernier message: 31/03/2006, 14h31

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