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électeurs multiples string ou objet. Quelle est la règle ?


Sujet :

jQuery

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut Sélecteurs multiples string ou objet. Quelle est la règle ?
    Je cherche a comprendre le comportement de Jquery sur des sélecteurs multiples, en particulier lorsque l'on lui passe des objets ...

    Ce que je trouve sur la doc JQuery concerne la syntaxe string séparé par des virgules;
    la définition officielle Selects the combined results of all the specified selectors.

    Ce qui fonctionne ici https://jsfiddle.net/rbjof052/4/

    Du coup je tente une approche en lui passant des objets https://jsfiddle.net/rbjof052/6/
    et là c'est le drame

    Et il en découle un comportement d'héritage que je ne m'explique pas ...
    https://jsfiddle.net/rbjof052/7/
    Il a l'air de combiner le selecteur string et l'objet et appliquer une notion de parent ? vu qu'il n'applique le css que sur les descandant .teste de #toc ??


    et si je pousse le raisonnement plus loin,
    https://jsfiddle.net/rbjof052/8/
    il devrait dasn ce cas soit colorier les deux .test enfant des contextes passés,
    soit ne rien colorer du tout car un .test ne peut pas être enfant des deux divs en même temps ...

    Quelle est là logique ?

    De même si je lui passe deux objets, peu importe l'ordre du coup lequel est le contexte ???
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Voici en fait là réponse à la question

    $(expr, context)
    Est juste un équivalent de :
    $(context).find(expr)


    ce qui n'est pas tout à fait vrai au vu du fait qu'en inversant les arguments dans le cas du div qui contient le .test, je ne devrais pas avoir le même résulat en mettant le .text en contexte.
    Il s'agit plutot d'une intersection
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Mais du coup je ne saisi pas la subtilité

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $obj1=$('#toc');
    $($obj1,'.test').css({'color': 'red'});
    $($('#toc'),'.test').css({'color': 'red'});// donne le même résultat
    $('#toc','.test').css({'color': 'red'});// ne donne pas le même résultat
    quelle différence y'a-t-il
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    console.log($($('#toc')))
    console.log($('#toc'))
    me retourne la même chose ...
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  4. #4
    Expert confirmé Avatar de Toufik83
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2012
    Messages
    2 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : Maroc

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2012
    Messages : 2 517
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <div class="foo"><div class="test">A</div></div>
    <div class="bar"><div class="test">B</div></div>
    <div id="toc"><div class="test">C</div></div>
    pour la couleur, je crois que l'ordre des éléments est important, vu que ".test" vient AVANT ".bar" et "#toc" si on fait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var toc=$('#toc'), bar=$('.bar'),test=$(".test");
    $(test, bar,toc).css({'color': 'red'}); //suivons cette ordre le résultat est bon.
    le résultat est correcte, par contre si on fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $(bar,toc,test).css() ou $(toc,bar,test).css() là le résultat n'est pas correcte.

  5. #5
    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 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    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 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $(bar,toc,test).css() ou $(toc,bar,test).css() là le résultat n'est pas correcte.
    Non car en tout état de cause le troisième argument n'est jamais pris en compte !
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  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
    Tout ça me paraît être du comportement bien documenté. L’important c’est de déterminer avec quelle signature la fonction jQuery est appelée. Sachant que toutes les signatures documentées ont au plus deux arguments, tout argument supplémentaire est, par conséquent, toujours ignoré.

    Un premier cas notable est la signature jQuery( selection )selection est un objet jQuery. Dans ce cas, la doc explique que l’objet sera cloné, autrement dit un nouvel objet jQuery sera retourné, contenant les mêmes éléments.

    (Note : sous Firefox j’avais l’impression que l’objet cloné n’était pas un objet jQuery, car la console l’affiche comme un tableau ; en réalité la seule différence est que l’objet original a une propriété prevObject et le clone n’en a pas. Du coup le clone n’a que des propriétés numériques ainsi que length, et du coup la console le fait apparaître comme un array.)

    Autrement, si tu commences par lui passer une chaîne, il va d’abord déterminer si c’est du HTML ou pas ; sinon il considère que c’est un sélecteur CSS. (dans la version 3.1.1, on peut voir ça à partir de la ligne 2971).

    Si, donc, il reconnaît un sélecteur CSS comme premier argument, alors le second argument, s’il est présent, est obligatoirement un context, et ce context peut être un élément DOM, l’objet document, ou un objet jQuery. La doc ne le dit pas mais ça peut également être une chaîne, elle sera alors traitée comme un sélecteur CSS. Dans tous les cas l’appel se comporte comme tu l’as dit : comme un équivalent de $(context).find(expr).
    La FAQ JavaScript – Les cours JavaScript
    Touche F12 = la console → l’outil indispensable pour développer en JavaScript !

Discussions similaires

  1. Réponses: 184
    Dernier message: 23/10/2013, 00h57
  2. [VBA-E]DatePart ? Quelle est la règle ?
    Par ouskel'n'or dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 12/05/2010, 12h17
  3. Réponses: 3
    Dernier message: 09/05/2006, 15h16
  4. Réponses: 16
    Dernier message: 19/05/2005, 16h20

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