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 :

[CSS/Javascript] Changement des propriété CSS dynamiquement [Sources]


Sujet :

JavaScript

  1. #1
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [CSS/Javascript] Changement des propriété CSS dynamiquement
    Bonjour à tous,

    je sais que l'on peut changer les propriétés css d'un élément dynamiquement avec javascript de cette façon:

    document.getElementById("id").style.CSS_propriete_a_changer= "nouvelle_valeur_CSS";

    Ma question est la suivante, est-ce qu'il est possible de changer la valeur de la propriété elle même de façon à ce que tous les élément qui pointent sur cette propriété soient changées d'un seul coup.

    Merci

  2. #2
    Membre éclairé
    Avatar de efficks
    Inscrit en
    Septembre 2005
    Messages
    712
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 712
    Points : 776
    Points
    776
    Par défaut
    Très bonne question...
    Je ne sais pas si c,est possible mais pour contourner le problème, tu pourrais chercher tous les éléments avec un certain nom de classe et changer le nom de la classe visée.
    Ça ne répond pas exactement à ta question mais ça peut solutionner ton problème.
    Avant de poster : FAQ, tutos, rechercher, google, ... Après :
    Merci

  3. #3
    hdd
    hdd est déconnecté
    Membre régulier Avatar de hdd
    Profil pro
    Inscrit en
    Février 2004
    Messages
    105
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2004
    Messages : 105
    Points : 74
    Points
    74
    Par défaut
    Bonjour,

    Pour changer de feuille de style dans du JS, ça doit être

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('element').className = "nouvelleClasse"

  4. #4
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    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
     
    <style type='text/css'>
    .rouge{
    	background: red;
    }
    </style>
    <script type='text/javascript'>
    	function go(){
    		sheet = document.styleSheets[0];
    		if(document.all)
    			sheet.addRule(".vert","background: green");			
    		else
    			sheet.insertRule(".vert { background: green }", sheet.cssRules.length);
     
     
    		document.getElementById('mondiv').className = "vert";
    	}
    </script>
    <div id='mondiv' class='rouge'>
    bla bla
    </div>
    <input type='button' onclick='go()' value='do' />
    Attention, ie et firefox ne réagissent pas pareil
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  5. #5
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    tiens meme un truc encore plus générique :
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    <style type='text/css'>
    #mondiv{
    	background: red;
    }
    </style>
    <script type='text/javascript'>
    	function getRuleIndex(name){
    		var cmpt = 0;
    		var index = 0;
    		var tab = null;
    		var good = false;
     
    		while(index<document.styleSheets.length && !good){
    			tab = document.all ? document.styleSheets[index].rules : document.styleSheets[index].cssRules;
     
    			while(cmpt<tab.length && !good){
    				if(tab[cmpt].selectorText.toLowerCase() != name)
    					good = true;
    				cmpt++;
    			}
     
    			index++;
    		}
     
    		return {sheetIndex:index-1,ruleIndex:cmpt-1};
    	}
     
    	function changeRule(selector,cssText){
    		infos = getRuleIndex(selector);
    		sheet = document.styleSheets[infos.sheetIndex];
    		if(document.all){
    			sheet.removeRule(infos.ruleIndex);
    			sheet.addRule(selector,cssText);			
    		}
    		else{
    			sheet.deleteRule(infos.ruleIndex);
    			sheet.insertRule(selector+"{"+cssText+"}", sheet.cssRules.length);
    		}
    	}
    </script>
    <div id='mondiv'>
    bla bla
    </div>
    <input type='button' onclick='changeRule("#mondiv","background-color:green")' value='do' />
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  6. #6
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Je ne pense pas que ce soit exactement ce que je voulais. Si j'ai bien compris, le code si-dessus ajoute une règle css et ensuite on l'assigne à un objet.

    Ce que je voudrait faire c'est changer la valeur de la propriété elle-même. Un peu comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .visibilite{ 
       visiility: hidden; 
    }
    devient

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    .visibilite{
       visibility:visible;
    }
    C'est que j'ai beaucoup d'objets qui pointent sur cette propriété et je voudrais les rendrent tous visible d'un seul coup sans avoir à faire des getElementById sur chacun d'eux.

    Merci

  7. #7
    Expert confirmé
    Avatar de siddh
    Inscrit en
    Novembre 2005
    Messages
    3 868
    Détails du profil
    Informations personnelles :
    Âge : 47

    Informations forums :
    Inscription : Novembre 2005
    Messages : 3 868
    Points : 5 011
    Points
    5 011
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    changeRule(".visibilite","visibility: visible;")
    ?
    Alunissage : Procédé technique consistant à déposer des imbéciles sur un rêve enfantin.

    Cours | FAQ | Sources Javascript
    Cours | FAQ | Sources PHP
    Mes Articles

  8. #8
    Candidat au Club
    Inscrit en
    Janvier 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Ah oui, tiens donc...

    Désolé j'étais entrain d'écrire mon message quand tu as posté le tiens...

    Merci!!

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 42
    Points : 22
    Points
    22
    Par défaut fix bug...
    Bonjour
    Merci pour ce code très utile, j'ai malgré tout du faire qq corrections (bug quand il y avait plusieurs stylesheet). Sinon il fonctionne très bien.

    Voici ma version:
    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    function getRuleIndex(name){
        var cmpt = 0;
        var index = 0;
        var tab = null;
        var good = false;
        while(index<document.styleSheets.length && !good){
            tab = document.all ? document.styleSheets[index].rules : document.styleSheets[index].cssRules;
            cmpt=0;
            while(cmpt<tab.length && !good){
                if(tab[cmpt].selectorText.toLowerCase() == name)
                    good = true;
                cmpt++;
            }
     
            index++;
        }
        if (good) {
        return { 
            sheetIndex:index-1,
            ruleIndex:cmpt-1
            };
        }
        return null;
    }
     
    function changeRule(selector,cssText){
        infos = getRuleIndex(selector);
        if (infos==null)
            return;
        sheet = document.styleSheets[infos.sheetIndex];
        if(document.all){
            sheet.removeRule(infos.ruleIndex);
            sheet.addRule(selector,cssText);
        }
        else{
            sheet.deleteRule(infos.ruleIndex);
            sheet.insertRule(selector+"{"+cssText+"}", sheet.cssRules.length);
        }
    }
    Je vais quand même regarder du coté de JQuery, pour voir s'ils proposent qq chose

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

Discussions similaires

  1. Modification des propriétés CSS
    Par popy67 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 12/02/2008, 17h49
  2. Supprimer des propriétés CSS par surcharge
    Par jojosbiz dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 31/10/2007, 07h57
  3. changement de propriété CSS dans IE
    Par corcule dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 23/10/2007, 18h34

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