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 :

[DOM] Récupérer les attributs d'une classe CSS ?


Sujet :

JavaScript

  1. #1
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut [DOM] Récupérer les attributs d'une classe CSS ?
    Bonjour à tous.

    Je cherche à créer une fonction javascript à laquelle je passerai un nom de classe CSS, et qui se chargerait de me stoquer dans un tableau les différentes propriétés ainsi que la valeur associée de cette classe.

    Savez-vous si une telle chose est possible SVP ? Avez-vous des pistes ? Je doit vous avouer que javascript n'est pas du tout mon domaine, et que je patauge un peu...

    beaucoup d'avance

    PB
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    il me semble que JS ne sait récupérer les CSS que dans la mesure où ils ont été appliqués à un élément (ne sait en fait que récupérer les caractéristiques d'un élément).
    Cela reviendrait à appliquer ta class à l'élément, puis en récupérer les caractéristiques au sens CSS.
    Mais attention, JS ne saura pas (toujours à ma connaissance) faire la différence entre les prop CSS issues de la class que tu viens de lui appliquer, et celles qu'il a hérité de ces éléments parents, par exemple ...

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  3. #3
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Bon, pas de bol, j'espérait que ce serait possible...

    Tant pis, je vais aller parser mes feuilles de styl coté serveur...

    beaucoup
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  4. #4
    Inactif Avatar de Hibou57
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    852
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 852
    Points : 493
    Points
    493
    Par défaut
    Hé là! ... pas si vite,

    Si tu es sous Internet Explorer, tu peux accéder au feuilles de style via document.styleSheets (attention, au « s »). Cette propriété de l'objet document, est une collection (une liste, au sens de MS) des feuilles de style chargées avec la page (cette collection comprend également les feuilles de styles éventuellement créées dynamiquement).

    Puisque tu demandais une piste, et non pas qu'on le fasse à ta place je te renvoie donc au SDK ou à MSDN pour consulter la documentation relative au DOM HTML d'Internet Explorer, et en apprendre plus sur la propriété styleSheets

    Bese7atek
    ------------------------------------------------------------
    Sur le web, c'est la liberté qui est gratuite, mais bien évidement pas la consomation ... et encore moins la consomation à outrance
    ------------------------------------------------------------
    Language shapes the way we think, and determines what we can think about [ B. Lee Whorf ] ... mais ce n'est pas tout à fait vrai à 100%...
    ------------------------------------------------------------
    Pascal (FreePascal?) - Ada (Gnat-3.15p)
    XSLT (XSLTProc) - CGI binaires (Ada/C) [ Clavier Arabe ]
    ------------------------------------------------------------

  5. #5
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Merci beaucoup de cette réponse, mais une solution purement IE ne va pas convenir dans le cas présent, je ne contrôle pas la config de mes utilisateurs

    Donc je vais me retourner vers le coté serveur, tant pis

    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  6. #6
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Si tu veux, je peux te fournir un work-around...
    Bon ce n'est qu'un work-around, j'en conviens, mais ca marcheras sur IE et FF au moins.

    La je dois y aller, je reviens cet aprèm, si ca t'intéresse, tu me dis, je le code (là c'est juste une idée)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  7. #7
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    c'est extrêmement gentil de ta part, mais je ne veux pas abuser non plus, je fait un peu mon boulet là

    Je pense qu'une solution coté serveur serait plus fiable non ? puisque je pourrai attaquer directement mes classes CSS, et donc je n'aurai pas les propriétés héritées...
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  8. #8
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Euh, comme tu veux mais bon coté serveur je vois pas comment tu vas faire pour analyser ton CSS

    Sinon, voila, j'ai trouvé un peu de tmps, je vais faire un premier brouillon :
    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 getStyle(el) {
      return (
        el.runtimeStyle ? el.runtimeStyle : (
          el.currentStyle ? el.currentStyle : (
            el.getComputedStyle()
          )
        )
      );
    }
    function cssDiff(el1, el2) {
      var s1, s2; s1=getStyle(el1); s2=getStyle(el2);
      var s3 = new Object();
      for (key in s1) {
        if (s1[key] != s2[key]) {
          s3[key] = s2[key];
        }
      }
    }
    function getCSSClass(className) {
       var el1 = document.createElement("a");
       var el2 = document.createElement("a");
       el2.className=className;
       return cssDiff(el1, el2);
    }
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  9. #9
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    Citation Envoyé par FremyCompany
    Euh, comme tu veux mais bon coté serveur je vois pas comment tu vas faire pour analyser ton CSS
    bah en lui passant le nom de ma classe, je vais pouvoir parser mes CSS présents sur le serveur, et récupérer mes infos

    Citation Envoyé par FremyCompany
    Sinon, voila, j'ai trouvé un peu de tmps, je vais faire un premier brouillon :
    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 getStyle(el) {
      return (
        el.runtimeStyle ? el.runtimeStyle : (
          el.currentStyle ? el.currentStyle : (
            el.getComputedStyle()
          )
        )
      );
    }
    function cssDiff(el1, el2) {
      var s1, s2; s1=getStyle(el1); s2=getStyle(el2);
      var s3 = new Object();
      for (key in s1) {
        if (s1[key] != s2[key]) {
          s3[key] = s2[key];
        }
      }
    }
    function getCSSClass(className) {
       var el1 = document.createElement("a");
       var el2 = document.createElement("a");
       el2.className=className;
       return cssDiff(el1, el2);
    }
    Merci beaucoup, je finit de me battre avec un autre soucis, et je regarde ça de près
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  10. #10
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Vraiment désolé, j'ai retravaillé ce code de toutes les manières qui soit, je n'arrive à rien avec Internet Explorer...

    Côté théorique, tout devrait marcher, mais seul FF me renvoie un résultat...

    Je vais aller quérir de l'aide auprès de plus agueri que moi (mais je sais pas si cette personne aura le temps de se pencher sur le problème)

    Le code actulel est :
    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
    document.cssProp = ['background','backgroundAttachment','backgroundColor','backgroundImage','backgroundPosition','backgroundRepeat','border','borderBottom','borderBottomColor','borderBottomStyle','borderBottomWidth','borderCollapse','borderColor','borderLeft','borderLeftColor','borderLeftStyle','borderLeftWidth','borderRight','borderRightColor','borderRightStyle','borderRightWidth','borderSpacing','borderStyle','borderTop','borderTopColor','borderTopStyle','borderTopWidth','borderWidth','bottom','captionSide','clear','clip','color','content','counterIncrement','counterReset','cssFloat','cursor','direction','display','emptyCells','float','font','fontFamily','fontSize','fontStyle','fontVariant','fontWeight','height','left','letterSpacing','lineHeight','listStyle','listStyleImage','listStylePosition','listStyleType','margin','marginBottom','marginLeft','marginRight','marginTop','maxHeight','maxWidth','minHeight','minWidth','orphans','outline','outlineColor','outlineStyle','outlineWidth','overflow','padding','paddingBottom','paddingLeft','paddingRight','paddingTop','pageBreakAfter','pageBreakBefore','pageBreakInside','position','quotes','right','styleFloat','tableLayout','textAlign','textDecoration','textIndent','textTransform','top','unicodeBidi','verticalAlign','visibility','whiteSpace','widows','width','wordSpacing','zIndex']
     
    function getStyle(el) {
      return (
        el.currentStyle ? el.currentSyle: (
          el.runtimeStyle ? el.runtimeStyle : (
            getComputedStyle(el, true)
          )
        )
      );
    }
    function cssDiff(el1, el2) {
      var s1, s2; s1=getStyle(el1); s2=getStyle(el2);
      var s3 = new Object();
      for (var j=0; j<document.cssProp.length;++j) {
        if (s2[document.cssProp[j]] != s1[document.cssProp[j]]) {
          s3[document.cssProp[j]] = s2[document.cssProp[j]];
        }
      }
      return s3;
    }
    function getCSS(className) {
       var el1 = document.createElement("div");
       var el2 = document.createElement("div");
       el2.className = className;
       return cssDiff(el1, el2);
    }
     
    window.onload = function() {
      var s = getCSS("testClass");
      var msg = "";
      for (key in s) {
        msg+=key + " : " + s[key] + "\n";
      }
      alert(msg);
    }
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  11. #11
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Ca y est, j'ai trouvé !

    En fait, IE prend son temps pour calculer le style, il faut donc attendre qu'il le fasse avant de continuer les opérations.

    Regarde bien comme je l'utilise avec onload
    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
            document.cssProp = ['background','backgroundAttachment','backgroundColor','backgroundImage','backgroundPosition','backgroundRepeat','border','borderBottom','borderBottomColor','borderBottomStyle','borderBottomWidth','borderCollapse','borderColor','borderLeft','borderLeftColor','borderLeftStyle','borderLeftWidth','borderRight','borderRightColor','borderRightStyle','borderRightWidth','borderSpacing','borderStyle','borderTop','borderTopColor','borderTopStyle','borderTopWidth','borderWidth','bottom','captionSide','clear','clip','color','content','counterIncrement','counterReset','cssFloat','cursor','direction','display','emptyCells','float','font','fontFamily','fontSize','fontStyle','fontVariant','fontWeight','height','left','letterSpacing','lineHeight','listStyle','listStyleImage','listStylePosition','listStyleType','margin','marginBottom','marginLeft','marginRight','marginTop','maxHeight','maxWidth','minHeight','minWidth','orphans','outline','outlineColor','outlineStyle','outlineWidth','overflow','padding','paddingBottom','paddingLeft','paddingRight','paddingTop','pageBreakAfter','pageBreakBefore','pageBreakInside','position','quotes','right','styleFloat','tableLayout','textAlign','textDecoration','textIndent','textTransform','top','unicodeBidi','verticalAlign','visibility','whiteSpace','widows','width','wordSpacing','zIndex']
     
            function getStyle(el) {
              try { window.recalc(); } catch (ex) {}
              return (
                el.currentStyle ? el.currentSyle : (
                  el.runtimeStyle ? el.runtimeStyle : (
                    document.defaultView.getComputedStyle ? document.defaultView.getComputedStyle(el, null) : (
                      getComputedStyle(el, null)
                    )
                  )
                )
              );
            }
            function cssDiff(el1, el2) {
              var s1, s2; 
              if (!document.all) {
                s1=getStyle(el1); s2=getStyle(el2);
              } else {
                s1=el1.currentStyle;
                s2=el2.currentStyle;
              }
              var s3 = new Object();
              for (var j=0; j<document.cssProp.length; j++) {
                if (s2[document.cssProp[j]] != s1[document.cssProp[j]]) {
                  s3[document.cssProp[j]] = s2[document.cssProp[j]];
                }
              }
              return s3;
            }
            function getCSS(className, callBack) {
                var el1 = document.createElement("div");
                var el2 = document.createElement("div");
                document.body.appendChild(el1);
                document.body.appendChild(el2);
                el2.className = className;
                var wait;
                wait = function () {
                    if (document.all && (!el1.currentStyle || !el2.currentStyle)) {
                        setTimeout(wait, 10);
                        return null;
                    } else {
                        var s = cssDiff(el1, el2);
                        document.body.removeChild(el1);
                        document.body.removeChild(el2);
                        callBack(s);
                    }
                }
                setTimeout(wait, 10)
                return true;
            }
     
            window.onload = function() {
                getCSS("testClass", function(s) {
                    var msg = "";
                    for (key in s) {
                        msg+=key + " : " + s[key] + "; \n";
                    }
                    alert(msg);
                });
            }
    Le meilleur résultat est donné par IE qui n'interprête pas les style (les autres changent les noms de couleurs en #xxyyzz ou en rgb(xx, yy, zz)
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

  12. #12
    Expert éminent
    Avatar de titoumimi
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    3 707
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 707
    Points : 7 285
    Points
    7 285
    Par défaut
    un énorme merci, je me colle dessus
    Globalement inoffensif
    Merci de respecter les règles du forum.
    Aucune question technique par MP !
    _______________________________________________________________________
    Cours Ruby et Ruby on Rails (RoR) - Cours PHP - FAQ Ruby / Rails - Livres Ruby / Rails
    Ajax facile avec Ruby on Rails, Prototype, script.aculo.us et les RJS
    Tutoriaux HTML/CSS et PHP

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    ... heu ... ben merci aussi : ma "connaissance" sur le sujet a bien évolué

    A+
    Pour tout savoir sur l'utilisation du forum

    En postant votre message, n'oubliez pas les Règles du Club.

  14. #14
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 289
    Points
    3 289
    Par défaut
    Juste une petite modification de routine :
    --> J'avais oublié un removeChild

    [EDIT]Code mis à jour
    Fremy
    Pour vos développements Web et une navigation agréable, le tout gratuit :
    1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
    2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey

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

Discussions similaires

  1. Récupérer les attributs d'une classe
    Par lagarkane dans le forum C++
    Réponses: 1
    Dernier message: 14/07/2014, 15h29
  2. Réponses: 1
    Dernier message: 23/07/2010, 13h53
  3. Réponses: 4
    Dernier message: 06/10/2008, 16h27
  4. Modifier en javascript les attributs d'une classe CSS
    Par troumad dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 05/09/2007, 10h45
  5. Réponses: 7
    Dernier message: 08/01/2005, 13h24

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