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 :

Changer dynamiquement le CSS d'une page


Sujet :

JavaScript

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut Changer dynamiquement le CSS d'une page
    Bonjour, je suis totalement débutant en javascript et je voudrais changer, via l'appel d'une fonction sur un bouton "apparence 1" "apparence 2" etc le style CSS de ma page html.

    J'ai donc pensé à capter le noeud "link" et de changer son attribut "href" lors du click.

    Voici 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
    16
    17
    function changeCSS()
    {
      var tab=document.getElementsByTagName('head');
      var tabEnfants=new Array();
      tabEnfants=tab.childNodes;  /* ou var tabEnfants=tab.childNodes; (normalement ça le met directement dans un tableau le childNodes non ??) */
     
      for(i=0;i<tabEnfants.length; i++)
      {
          if(tabEnfants[i].tagName=="link")
          {
              tabEnfants[i].tagName.setAttribute('href', 'style2.css');
          }
      }
     
      alert("bonjour");
     
    }
    Voici comment je l'implémente dans le html :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
      <head>
         <script type="text/javascript" src="changeCSS.js" >   </script> 
      <link rel="stylesheet" type="text/css" href="style_defaut.css">
     
      </head>
    <body>
    <form name="formCSS" action="">
    <input type="button" value="Test" onclick="changeCSS()"/> 
    </form>
    </body>
    Et lorsque j'éxécute le firebug il me met erreur à la ligne
    "for(i=0;i<tabEnfants.length; i++)"
    tabEnfants ---> undefined !!

    Alors que je l'ai bien définis non ??

    ps : pourquoi je dois redémarrer une nouvelle page firefox au bout de trois clics sur le boutons javascript sinon le js n'a plus l'air de fonctionner ?


    Merci par avance pour toute réponse !

    Cordialement.

  2. #2
    Modérateur
    Avatar de Vil'Coyote
    Homme Profil pro
    Développeur adélia & Web
    Inscrit en
    Février 2008
    Messages
    4 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur adélia & Web
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2008
    Messages : 4 583
    Par défaut
    Salut,
    j'avous ne pas trop voir ou se place le soucis (pour l'instant) cependant je me pose une question sur ton code html. Est ce normal d'avoir les balise <head></head> dans le body? il me semble que rien que ça cela devrais poser problème.
    la vie n'est pas cirrhose des foies ...

    Avant de poster un message Rechercher n'est pas qu'une option.
    FAQ Web - Tuto Web

  3. #3
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Salut,
    Bien que JavaScript soit faiblement typé, il est assez susceptible sur les tableaux.
    Dans ton cas, tu déclares une variable de type Array mais tu lui affectes une collection.
    Ceci dit, tu te compliques pas mal la vie alors qu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function changeCSS()
    {
      var mon_css=document.getElementsByTagName('link')[0];
      mon_css.setAttribute('href', 'style2.css');
      alert("bonjour");
    }
    devrait suffire
    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

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Citation Envoyé par Vil'Coyote Voir le message
    Salut,
    j'avous ne pas trop voir ou se place le soucis (pour l'instant) cependant je me pose une question sur ton code html. Est ce normal d'avoir les balise <head></head> dans le body? il me semble que rien que ça cela devrais poser problème.
    Je m'étais trompé en voulant alleger le copié collé mais merci quand même ^^.

    Citation Envoyé par Bovino Voir le message
    Salut,
    Bien que JavaScript soit faiblement typé, il est assez susceptible sur les tableaux.
    Dans ton cas, tu déclares une variable de type Array mais tu lui affectes une collection.
    Ceci dit, tu te compliques pas mal la vie alors qu'un simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function changeCSS()
    {
      var mon_css=document.getElementsByTagName('link')[0];
      mon_css.setAttribute('href', 'style2.css');
      alert("bonjour");
    }
    devrait suffire
    Ca marche parfaitement...et c'est beaucoup plus simple.
    Ce qui m'énerve, c'est que je comprends pas pourquoi mon code ne marche pas.
    Si jamais tu pouvais juste m'expliquer la signification de ton code :

    var mon_css=document.getElementsByTagName('link')[0];
    là tu enregistre dans un tableau tous les noeuds du noeud "link" ? que signifie le [0] en fait c'est ça que je capte pas..
    Si tu pouvais m'éclaircir, ça m'aiderait beaucoup pour progresser.

    Merci en tout cas !

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    en fait il mets dans un array toutes les balises link de la page ...
    le premier indice du tableau est 0

    le souci est si tu as d'autres balises link ... il faudra bien les ordonner sur la page..
    Sinon on doit pouvoir passer par un id non ?

    on doit aussi pouvoir passer par un id
    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 averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 12
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    en fait il mets dans un array toutes les balises link de la page ...
    le premier indice du tableau est 0
    Aaaah
    si j'ai bien compris l'instruction :
    var mon_css=document.getElementsByTagName('link')[0]; signifie qu'il sauve le premier link dans la variable mon_css c'est ça ?
    vraiment beaucoup plus simple effectivement !

    Merci beaucoup !

  7. #7
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Oui exact, il ne prend que le premier là ...
    tellement l'habitude de chopper une collection complète ...
    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 !

  8. #8
    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 : 54
    Localisation : France, Gironde (Aquitaine)

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

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Billets dans le blog
    20
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    Sinon on doit pouvoir passer par un id non ?
    Oui, absolument et effectivement, ça permet de ne pas avoir à se soucier de l'ordre d'éventuelles feuilles de styles multiples
    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

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

Discussions similaires

  1. Modifier les définition CSS - Modifier dynamiquent la hauteur d'une page
    Par tavarlindar dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 31/05/2008, 19h31
  2. Changer dynamiquement le fond d'une page web (avec cookie si possible)
    Par Rambytes dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 18/11/2007, 11h43
  3. plusieurs css pour une page
    Par difficiledetrouver1pseudo dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 20/02/2006, 21h30
  4. Réponses: 3
    Dernier message: 31/08/2005, 17h52
  5. Comment changer dynamiquement la valeur d'une option de DbGrid ?
    Par Atrebate62 dans le forum Composants VCL
    Réponses: 4
    Dernier message: 17/03/2005, 13h35

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