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

jQuery Discussion :

Sélectionner par la négative un groupe d'éléments


Sujet :

jQuery

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut Sélectionner par la négative un groupe d'éléments
    Bonjour

    Comment indiquer en jQUERY de mettre en rouge :

    TOUS les éléments de ma page ayant la classe .fa

    SAUF CEUX DONT

    les PARENTS ont la classe .btn-color

    j'ai entre autres tentatives essayé cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $('.fa').parent(':not(.btn-color)').css({'color':'red'});
    mais plouf .

    par exemple : tous mes boutons comme ceux ci-dessous ne doivent pas être affecté par la modification de couleur du <span>

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <button class="btn-color">
    <span class="fa fa-info fa-lg"></span> - Par nom
    </button>

    (vous aurez peut-être reconnu l'usage des font "awesome font" )

    merci

    une idée ?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    1 616
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 1 616
    Par défaut
    Quand j'essaie ton truc dans jsfiddle ça marche

  3. #3
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $('.fa').each( function(){
       if( !$(this).parent().hasClass('.btn-color') )
       {
          $(this).css({'color':'red'});
       }
    });

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    merci les collègues

    dans jsdiffle ca marche en effet ...pas dans ma page ...
    la proposition avec .each est aussi OK.

    sinon en Css PUR ... comment traduire ma demande ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .fa:not(button>span.fa)  {color:'red'}
    ca colle pas

  5. #5
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    Bonjour,
    on peut s'interroger sur l'utilité d'utiliser jQuery pour affecter un style à des éléments, sauf bien sûr si cela participe au « dynamisme » de la page, ce qui ne semble pas être le cas ici.
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    button:not(.btn-color) .fa{
        color: red;
    }
    ou en précisant enfant direct
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :not(.btn-color) > .fa{
        color: red;
    }

    En reportant ces sélecteurs dans ton jQuery tu devrais obtenir le même résultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $('button:not(.btn-color) .fa').css({
        'color': 'red'
    });
    // ou
    $(':not(.btn-color) > .fa').css({
        'color': 'red'
    });
    Ceci n'empêche que ton code ne fonctionne pas comme tu le souhaites car c'est aux parents que tu appliques le CSS et non aux éléments de classe="fa" !

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

    Informations professionnelles :
    Activité : En recherche d'emploi

    Informations forums :
    Inscription : Juin 2010
    Messages : 3 100
    Par défaut
    Un petit mot à propos de la performance des sélecteurs.
    Le sélecteur :not() est équivalent à *:not(). Autrement dit, c’est un * implicite. Et * est un des sélecteurs les moins performants.
    Donc il vaut mieux toujours préciser button:not().
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Bonjour à tous et merci pour votre aide. J’ai effectivement trouvé parmi vos propositions une solution qui fonctionne.
    Elle utilise le sélecteur :not même si elle serait gourmande.

    C’est donc celle-là qui marche.

    :not(.btn-color)> .fa{color:’red ´}

    alors une question

    cette proposition

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    button:not(.btn-color) .fa{
        color: red;
    }

    est-elle vraiment identique à celle ci

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    :not(.btn-color)> .fa{color:’red ´}

    car l'une donne satisfaction et l'autre non.

  8. #8
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    est-elle vraiment identique à celle ci
    Non, si l'on excepte les erreurs de syntaxe, la spécificité des sélecteurs n'est pas la même ce qui peut poser problème dans certains cas.


    car l'une donne satisfaction et l'autre non.
    C'est normal, l'une est conforme CSS pas l'autre
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :not(.btn-color)> .fa {
        color:’red ´
    }
    est non conforme il y a des quottes en trop ce qui invalide la déclaration.
    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :not(.btn-color)> .fa {
        color: red;
    }

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    Tu as raison...

    Cependant en corrigeant la syntaxe :

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    :not(.btn-color)> .fa {
        color: red;
    }

    et

    Code CSS : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    button:not(.btn-color) .fa{
        color: red;
    }

    ne se comporte pas de la même manière.
    Seule la première est OK.



    Puisque tu es hyper calé ... je me permet de te soumettre un complément de solution :


    dans le html suivant (extrait) :

    Code HTML : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <button class="btn-color"><span class="fa fa-info fa-lg"></span> - Par nom</button>
    <button class="btn-color"><span class="fa fa-alert fa-lg"></span> - Par ville</button>
    <span class="fa fa-alert fa-lg">Coucou</span>
    <span class="fa fa-check fa-lg">Recoucou</span>

    Comment spécifier que je souhaite avoir :

    - Une coloration ROUGE sur les éléments de classe 'fa' ...
    - qui ne sont pas dans des BOUTONS ... ( CA TU Y ES PARVENU ... MERCI ENCORE )

    ET qui ne sont pas de classe 'fa-alert' !!

    ça devient tordu.
    (petite explication : je permet sur un site dynamique de changer la couleur des icônes des pages ... MAIS pas si l'icône se retrouve dans un bouton ou si l'icône est de nature à alerter visuellement le visiteur ( irones style coche check ou icône alerte . cela permet de garder des couleurs particulières a certaines icônes pour être plus parlantes que si elles avaient aussi la même couleur que toutes les autres)


    merci

  10. #10
    Invité
    Invité(e)
    Par défaut
    Bonjour,,

    Précise-nous d'abord :
    • ta version de Bootstrap
    • ta version de Font-awesome

  11. #11
    Modérateur

    Avatar de NoSmoking
    Homme Profil pro
    Inscrit en
    Janvier 2011
    Messages
    17 209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 17 209
    Par défaut
    ne se comporte pas de la même manière.
    Seule la première est OK.
    dans ton contexte initial le comportement est le même, rappel du contexte initial
    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <button class="btn-color">
        <span class="fa fa-info fa-lg"></span> - Par nom
    </button>

    Maintenant dans ton nouveau contexte cela ne peut plus fonctionner de la même manière.

    Petit rappel, les sélecteurs CSS se lisent de droite à gauche donc
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    button:not(.btn-color) .fa {}
    (1) Tout élément ayant une classe fa étant enfant d'un élément button n'ayant pas de classe btn-color
    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    :not(.btn-color) > .fa  {}
    (2) Tout élément ayant une classe fa étant enfant direct d'un élément quelconque n'ayant pas de classe btn-color.

    La nuance est subtile mais existe, dans le cas (2) les éléments parent sont donc, par exemple, html, head, meta, title, link, style, script, body etc (relire l'intervention de Watilin)


    Puisque tu es hyper calé ... je me permet de te soumettre un complément de solution :
    La flaterie ne sert à rien , ce qu'il faut c'est prendre le temps de lire et de comprendre le fonctionnement et la philosophie de la cascade.
    Quant à la solution que tu soumets, je pense que tu parles plutôt de question !


    ça devient tordu.
    Quand cela devient trop « tordu », il ne faut pas hésiter à créer des classes qui permettent de faire du regroupement.

  12. #12
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    83
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 83
    Par défaut
    merci pour ton aide .
    je maintien que tu es bigrement calé.
    j'ai opté pour mettre une classe supplémentaire aux éléments que je ne veux pas affecter par ta formule initiale.
    du coup ... je m'en sors avec cela :

    Code css : Sélectionner tout - Visualiser dans une fenêtre à part
    :not(.btn-color)> .fa:not(.original){color:<?= $_SESSION['Users']['bckgiconescolor'];?>;}


    mouchas gracias

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

Discussions similaires

  1. Radio button une seule sélection par groupe
    Par dmoluc dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/05/2018, 11h43
  2. Editeur de texte qui fait la sélection par colonne
    Par wodel dans le forum Windows XP
    Réponses: 5
    Dernier message: 10/11/2010, 13h45
  3. Réponses: 3
    Dernier message: 31/08/2006, 00h38
  4. [CSS]Problème de centrage par marges négatives
    Par Oluha dans le forum Mise en page CSS
    Réponses: 5
    Dernier message: 08/08/2006, 15h01
  5. Couleur de sélection par défaut
    Par sicard_51 dans le forum AWT/Swing
    Réponses: 2
    Dernier message: 20/04/2003, 23h35

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