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 :

Le contexte sur jQuery


Sujet :

jQuery

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut Le contexte sur jQuery
    Bonjour,

    Je n'arrive toujours pas à comprendre la notion de contexte sous jQuery.

    Le contexte est censé définir... un contexte où chercher, histoire de ne pas parcourir tout l'arbre du DOM.
    Mais quelle est la différence entre faire $("#foo a") et $("a","#foo") ? Ça ne revient pas au même ?

    Merci.

  2. #2
    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 : 53
    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
    Salut.
    Tout d'abord, attention, en JavaScript, la notion de contexte se réfère aux variables, propriétés et méthodes accessible depuis un objet, cela n'a donc rien à voir avec la notion d'objet jQuery.
    Sinon, le principe de base de jQuery est la récupération et le traitement de collections d'éléments (jQuery == JavaScript Query). Pour cela, le framework se base sur une syntaxe de sélection proche de la syntaxe CSS.
    Donc non, faire $("#foo a") et $("a","#foo") ne revient pas du tout au même, dans le premier cas, tu cherches toutes les balises <a> présentes dans l'id 'foo', dans le second, tu cherches toutes les balises <a> plus la balise d'id 'foo'.
    Voir à ce sujet : http://pckult.developpez.com/tutorie.../introduction/
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Mon cher Bovino, je crains qu'il y ait confusion. J'en suis un tout petit peu plus loin (j'espère !!) dans jQuery et c'est bien ce qu'ils nomme contexte, même si j'ai bien compris que le "contexte" était quelque chose - autre chose ? - de spécifique.

    Donc, non, je ne suis pas totalement newbie et c'est moi qui pourrait me moquer car tu confonds $("a","#foo") et $("a,#foo")
    C'est totalement différent et la première notation fait appel au "context" de jQuery.
    D'après jQuery, cela permet de ne pas parcourir la totalité de l'arbre DOM, ce qui peut être extrêmement plus rapide dans le cas d'un doc complexe.
    Mais je me posais la question de savoir si en utilisant $("#foo a") à la place de $("a","#foo"), le parcours de l'intrégralité du DOM se faisait.
    Et si,tout simplement, ces notations étaient similaires.
    Pour ma part, j'utilise le context conjointement à this car je ne sais pas si on peut faire autrement : $(this, "#context_version_jQuery")

    J'ai l'impression que bcp de subtilités de jQuery passent inaperçus de beaucoup (et la 1.4(.2) en comprend un paquet)...

  4. #4
    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 : 53
    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
    Effectivement, je me suis un peu emmêlé les sabot

    Bref, dans l'exemple que tu donnes, les deux versions me semblent similaires. En fait, en revanche, l'intérêt de préciser le "contexte" est la possibilité de lui passer un objet jQuery, donc sur lequel il n'y a pas de recherche supplémentaire à faire, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var maSelection = $('a:even');
    // Divers traitements
    var autreSelection = $('.filtre', maSelection);
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Février 2005
    Messages
    219
    Détails du profil
    Informations personnelles :
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2005
    Messages : 219
    Points : 174
    Points
    174
    Par défaut
    Ah ben voilà ! Tu vois quand tu veux

    J'étais assez nouille pour l'utiliser avec this et pas penser à l'utiliser avec un autre objet jQuery...

    Par contre, je ne sais toujours pas si les 2 versions "#foo a" et "a","#foo" sont vraiment équivalentes et comme c'est pas bien compliqué, voici un bench tout juste réalisé qui nous apprend que ce n'est pas DU TOUT identique et que, contrairement à ce que j'avais compris de la doc, la mise en contexte ne permet pas d'aller plus vite, bien au contraire :

    Test effectué sur une longue page bordélique à souhait (issue de la doc php) :
    Test 1 : var a = $('.comment').length;
    Test 2 : var a = $('.note .comment').length;
    Test 3 : var a = $('.comment','.note').length;

    Résultats sur 500 itérations : même nombre de .comment compté (185)
    1. = 2. 1815ms
    3. 8502ms !!!

    Avec des id, c'est pire puisque sans contexte il est retrouvé immédiatement.

  6. #6
    Rédacteur

    Avatar de danielhagnoul
    Homme Profil pro
    Étudiant perpétuel
    Inscrit en
    Février 2009
    Messages
    6 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 73
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant perpétuel
    Secteur : Enseignement

    Informations forums :
    Inscription : Février 2009
    Messages : 6 389
    Points : 22 933
    Points
    22 933
    Billets dans le blog
    125
    Par défaut
    Bonsoir.

    Je pense que : est équivalent à et devrait être plus rapide depuis jQuery 1.4

    Blog

    Sans l'analyse et la conception, la programmation est l'art d'ajouter des bogues à un fichier texte vide.
    (Louis Srygley : Without requirements or design, programming is the art of adding bugs to an empty text file.)

Discussions similaires

  1. Couplage avec Apache: mapper root context sur une appli?
    Par jfourment dans le forum Tomcat et TomEE
    Réponses: 3
    Dernier message: 18/07/2007, 08h28
  2. [debutant] trouver le context sur struts
    Par pouss dans le forum Struts 1
    Réponses: 4
    Dernier message: 01/12/2005, 18h45
  3. Alimenter le context sur un appel Javascript ?...
    Par Sylvain James dans le forum XMLRAD
    Réponses: 2
    Dernier message: 20/10/2003, 15h44

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