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 :

Accès au css depuis javascript


Sujet :

JavaScript

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut Accès au css depuis javascript
    Bonjour,

    J'aimerais calculer la taille des marges autour d'un de mes objets html.
    Mon objet est déclaré de cette manière dans mon fichier html :
    Le code css est situé dans une feuille de style à part :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #viewer
    {
    	width : 100%;
    	height : 100%;
    	margin-left : 300px;
    	margin-right : 0px;
    }
    Au sein de mon fichier javascript j'effectue la boucle suivante afin de calculer la somme des marges des objets contenant mon objet viewer (seul mon objet viewer possède une marge dans le cas actuel) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    var offsetTop = 0;
    var offsetLeft = 0;
    var p = document.getElementById('viewer');			
    while(p.style != undefined){
       offsetTop += p.style.marginTop;
       offsetLeft += p.style.marginLeft;
       p = p.parentNode;
    }
    A la suite de cela, offsetLeft devrait contenir 300. Hors il ne contient rien. La valeur de p.style.marginLeft de mon objet viewer a pour valeur "undefined" quand je l'affiche dans la console.

    Par contre si je place le css dans le fichier html comme suit, tout marche bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <div id="viewer" style="width:100%;height:100%;margin-left:300px;margin-right:0px"></div>
    Pourquoi ne puis-je pas accèder au css si il se trouve dans une feuille de style externe au html ?

    Merci de vos réponses

    Cordialement

    David

  2. #2
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    a quoi ça sert ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(p.style != undefined){

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    A chaque fois je récupère le conteneur parent afin de vérifier si celui-ci a une valeur différente de zéro dans ses propriétés marges. J'utilise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(p.style != undefined){
    afin de vérifier s'il existe encore un objet père. Si la propriété style existe alors c'est un objet html (document, page, div etc..). Sinon si la propriété n'existe pas alors cela veut dire que l'on est remonté trop haut, on a donc atteint le dernier conteneur (document), on s'arrête alors.

  4. #4
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    A chaque fois je récupère le conteneur parent
    tu es dans une boucle ?

    tu ne nous montre pas le code entier ?

  5. #5
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Moi je trouve que ça ressemble à de l'attente active... Boucler pour attendre quelque chose n'est pas une bonne façon de faire en JS, en général.

    https://developer.mozilla.org/en/DOM...tComputedStyle

  6. #6
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Excusé moi mais j'ai du mal à vous suivre ^^ ....
    Où voyez vous de l'attente ? ^^

    Je n'attends jamais, à partir d'un div donné, je vérifie si se div a une marge, si oui j'enregistre sa valeur. Une fois cela fait je récupère le div parent, (soit le div qui contient notre premier div) Je vérifie alors si il possède une marge .. etc

    Jusqu'à arriver au conteneur le plus haut dans la hiérarchie, soit document sauf erreur.
    Afin de savoir si p.parentNode n'est pas null (en d'autre mot savoir si p est contenu par un autre élément html et donc que je n'ai pas encore atteint le conteneur le plus haut dans la hiérarchie) j'accède à une propriété du conteneur afin de savoir si elle existe. Si c'est le cas cela signifie que l'élément parent existe. J'ai choisi style, mais j'aurais pu choisir autre chose. Si la propriété existe c'est que j'ai bien récupéré un élément html.
    J'avais trouvé cette exemple sur internet, cela fonctionne bien.

  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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    heu un if tout court au lieu du while non?

  8. #8
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    il faut forcement boucler pour remonter tous les éléments parents non ?

  9. #9
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    encore faudrait il tester que le parent existe ?

  10. #10
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 47
    Points : 52
    Points
    52
    Par défaut
    Tu peux passer par du JQ peut-etre ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $("#selecteur").css('margin-left');
    pour voir si sa marche comme cela

  11. #11
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Tu n'as pas accès au contenu des définitions css, mais tu peux par contre récupérer des informations de tes dom-objects comme l'offset(left ou top) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while(p){
    	offsetTop += p.offsetTop?p.offsetTop:0;
    	offsetLeft += p.offsetLeft?p.offsetLeft:0;
    	p = p.parentNode;
    }

  12. #12
    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
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Tu n'as pas accès au contenu des définitions css
    Si, c'est possible via la collection cssRules.
    Ceci dit, c'est assez compliqué à maitriser (donc très peu utilisé et peu connu) et offre un intérêt assez limité comparé à getComputedStyle ou currentStyle.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Watilin Voir le message
    Moi je trouve que ça ressemble à de l'attente active...
    Je ne savais même pas que ça existait !
    Ca veut dire "aller se chercher une bière pendant les pubs, en attendant que le film recommence" ?

  14. #14
    Membre expérimenté Avatar de Willpower
    Homme Profil pro
    sans emploi
    Inscrit en
    Décembre 2010
    Messages
    1 009
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : sans emploi

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 009
    Points : 1 519
    Points
    1 519
    Par défaut
    Citation Envoyé par Bovino Voir le message
    Si, c'est possible via la collection cssRules.
    Ceci dit, c'est assez compliqué à maitriser (donc très peu utilisé et peu connu) et offre un intérêt assez limité comparé à getComputedStyle ou currentStyle.
    Je ne connaissais aucun des 3, comme quoi, j'en apprend encore tous les jours.


    Sinon effectivement, la boucle de LanfeustXIII avait du sens, et servait à remonter les éléments du DOM. (et non pas à vérifier si l'objet avait du style ou encore moins à "attendre" qu'il en ait^^)

  15. #15
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Sinon effectivement, la boucle de LanfeustXIII avait du sens, et servait à remonter les éléments du DOM. (et non pas à vérifier si l'objet avait du style ou encore moins à "attendre" qu'il en ait^^)
    Donc il eut fallu faire la boucle sur le teste d'existence du parent et pas sur le style ...

  16. #16
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Tu peux passer par du JQ peut-etre ?
    Peut être est ce une bonne idée, je ne connaissais pas cette possibilité il faut que j'essaie merci

    Sinon effectivement, la boucle de LanfeustXIII avait du sens, et servait à remonter les éléments du DOM.
    Voilà exactement

    Donc il eut fallu faire la boucle sur le teste d'existence du parent et pas sur le style ...
    Oui en effet la vérification que j'effectue est sans doute ambiguë je l'admet.

    Ceci dit, c'est assez compliqué à maitriser (donc très peu utilisé et peu connu) et offre un intérêt assez limité comparé à getComputedStyle ou currentStyle.
    Voila la solution à mon problème : getComputedStyle
    Merci , ça marche très bien pour récupérer les données css contenues dans une feuille de style

  17. #17
    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 640
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 74
    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 640
    Points : 66 663
    Points
    66 663
    Billets dans le blog
    1
    Par défaut
    Voila la solution à mon problème : getComputedStyle
    Merci , ça marche très bien pour récupérer les données css contenues dans une feuille de style
    Attention à la confusion !!
    getComputedStyle récupère le style affiché !!
    Si il y a eu modification dynamique, le style dans la feuille de style peut être différent !!

  18. #18
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Doubs (Franche Comté)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2011
    Messages : 33
    Points : 15
    Points
    15
    Par défaut
    Attention à la confusion !!
    getComputedStyle récupère le style affiché !!
    Si il y a eu modification dynamique, le style dans la feuille de style peut être différent !!
    Ah, je ne savais pas ça mais je ne pense pas que ça ait d'impact défavorable dans mon cas, au contraire, sauf erreur

  19. #19
    Expert éminent
    Avatar de Watilin
    Homme Profil pro
    En recherche d'emploi
    Inscrit en
    Juin 2010
    Messages
    3 094
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 094
    Points : 6 755
    Points
    6 755
    Par défaut
    Mea culpa (et trois ans plus tard ^^), je n'avais pas vu le p = p.parentNode;, du coup ça n'a rien à voir avec de l'attente active.

    Pour les curieux, l'attente active c'est justement basé sur une boucle while, en gros on tourne dans le vide en attendant que la situation évolue. C'est souvent considéré comme maladroit car ça monopolise le processeur... http://fr.wikipedia.org/wiki/Attente_active

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 10/12/2007, 22h02
  2. Accés à java depuis javascript
    Par kodo dans le forum Autres
    Réponses: 2
    Dernier message: 28/09/2006, 20h25
  3. Accès serveur WEB depuis l'internet
    Par Ultra-FX dans le forum Réseau
    Réponses: 2
    Dernier message: 26/05/2005, 17h00
  4. [servlet] feuille de styme css et javascript
    Par bob33 dans le forum Servlets/JSP
    Réponses: 9
    Dernier message: 24/03/2004, 08h08

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