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 :

Réinitialiser une classe css à sa valeur initiale


Sujet :

JavaScript

  1. #1
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut Réinitialiser une classe css à sa valeur initiale
    Bonjour,

    N'étant pas très futé en javascript, je rencontre un problème pour réinitialiser une classe css à sa valeur de départ.

    Je génère un tableau dynamiquement avec php, avec alternance de couleur sur les lignes, ceci via une class css.

    Chaque ligne contient 2 checkbox , qui lorsque l'une d'elle est cochée, décoche l'autre et colore ma ligne d'un couleur suivant l'élément coché.

    Comment faire pour récupérer la valeur de base de la classe css de base ?

    Car si je modifie une 1ère fois la classe, c'est ok, mais quand je la modifie une seconde fois, elle contient ce qui a été déjà ajouté.

    Exemple:
    Ma class de base contient ligne1 ou ligne2

    Je cliques sur la 1ère checkbox d'une ligne1, la classe est ajoutée, j'obtiens:
    ligne1 vert

    Mais ensuite, je coche la 2nde checkbox, là problème, puisque j'obtiens :
    ligne1 vert rouge

    Comment récupérer la valeur de la classe de base, sans modif par le js ?

    Merci.

  2. #2
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    Une remarque :
    Chaque ligne contient 2 checkbox , qui lorsque l'une d'elle est cochée, décoche l'autre et colore ma ligne d'un couleur suivant l'élément coché.
    Tu peux utiliser les boutons radio..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <input type="radio" id="idRadio1" name="radio1" checked="checked">
    <input type="radio" id="idRadio2" name="radio1">
     
     
    <input type="radio" id="idRadio3" name="radio2" checked="checked">
    <input type="radio" id="idRadio4" name="radio2">
    <input type="radio" id="idRadio5" name="radio2">
    Donne leur le même nom pour créer des groupes.




    Exemple:
    Ma class de base contient ligne1 ou ligne2

    Je cliques sur la 1ère checkbox d'une ligne1, la classe est ajoutée, j'obtiens:
    ligne1 vert

    Mais ensuite, je coche la 2nde checkbox, là problème, puisque j'obtiens :
    ligne1 vert rouge

    Comment récupérer la valeur de la classe de base, sans modif par le js ?
    Peux-tu faire quelque chose de semblable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var element = document.getElementById("id_td");
    var chk1 = document.getElementById("id_checkbox1");
    var chk2 = document.getElementById("id_checkbox2");
     
    Si (chk1.checked)
        element.className = "ligne1 vert";
     
    Si (chk2.checked)
        element.className = "ligne1 rouge";

  3. #3
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Oui, j'avais pensé au bouton radio, mais le problème avec eux, c'est que l'on ne peut pas les décocher, du moins sans en passer par du javascript.

    Pour ta 2nde solution, non, je ne peux pas le faire, puisque je ne sais pas par avance ce que contient la class de l'élément tr.

    J'ai trouvé à l'instant une solution en utilisant substring, ça m'oblige un donner des noms de classes de même longueur, mais ça à l'air de fonctionner

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    function selectLigne(boxId, box2Id, trId, class)
    {
        var tr = document.getElementById(trId);
        var box = document.getElementById(boxId);
        var box2 = document.getElementById(box2Id);
        if( box.checked )
        {
          box2.checked = false;
          tr.className = tr.className.substring(0, 12) + " " + class;
        }
        else
          tr.className = tr.className.substring(0, 12);
    }
    Merci de ta réponse

  4. #4
    Expert éminent sénior
    Avatar de Auteur
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    7 650
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 7 650
    Points : 11 142
    Points
    11 142
    Par défaut
    si tu veux connaître les classes appliquées sur ton objet, avec une expression régulière :

    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    function test()
    {
     var classes = "classe1 uneAutreClasse classe2 classe3";
     
     var tab = new Array();
     var exp = /(\w*[^\s])/gi;
     
     tab = classes.match(exp);
     alert(tab);
    }
    tab te donne la liste des classes et tab.length, le nombre de classes.

    avec ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    var tr = document.getElementById(trId);
    var classes;
    var tab = new Array();
    var exp = /(\w*[^\s])/gi;
     
    classes = tr.classeName;
    tab = classes.match(exp);
    Ensuite parcours le tableau tab et garde ce qui t'intéresse
    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    tr.classeName = tab[0]+" "+tab[2]; //ne pas oublier l'espace !

  5. #5
    Membre éclairé
    Inscrit en
    Septembre 2006
    Messages
    685
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 685
    Points : 658
    Points
    658
    Par défaut
    Ah oui, c'est encore mieux !

    J'avais pas pensé aux expressions régulières, vu que je connais pas du tout la syntaxe en js.

    Cette solution me permet de pouvoir changer mes noms de classes css sans toucher au javascript.

    Merci Auteur

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

Discussions similaires

  1. [DOM] Récupérer les attributs d'une classe CSS ?
    Par titoumimi dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 10/07/2007, 14h33
  2. Ajouter une class CSS a une nouvelle cellule
    Par Arfigado dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 26/09/2006, 10h08
  3. Utiliser le background color d'une class css dans un body..
    Par WeDgEMasTeR dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 02/07/2006, 03h40
  4. Modifier dynamiquement une classe CSS
    Par systemofaxav dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/06/2006, 16h49
  5. Appeler une classe CSS avec Javascript
    Par p0Kep0K dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 13/02/2006, 14h50

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