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 :

Petit truc utile que j'ai découvert $.each [Trucs & Astuces]


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 Petit truc utile que j'ai découvert $.each
    Je débarque sans doute de la dernière pluie, mais je tiens à vous faire partager une petite découverte que j'ai faite hier soir.

    En réfléchissant sur le each de JQuery, je me disais qu'il servait à parcourrir des collections...
    Je me demandais si ce each pouvait servir pour travailler sur les arrays et autres collections javascript.

    j'ai tenté
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var chaine ="un;deux;trois;quatre;cinq;six"
    var tab = chaine.split(';')
    tab.each(function(){alert($(this))})
    Qui me retourna un beau:
    cet objet ne gère pas cette methode
    En fouillant un peu j'ai découvert ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    var chaine ="un;deux;trois;quatre;cinq;six"
    var tab = chaine.split(';')
    $.each(tab,function(){alert(this)})
    appliquable également sur les objets json:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var obj={un:{en:'one',de:'ein'},deux:{en:'two',de:'zwei'},trois:{en:'three',de:'drei'}}
    $.each(obj,function(){alert(this.en)})
    $.each(obj,function(){alert(this.de)})

    En revanche une chose m'échappe, pourquoi ceci ne fonctionne-t-il pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var doo={ truc: function(param){alert(param)}  }
    doo.truc('hello') // j'ai bien un hello 
    $.each(doo,this('bonjour')) //j'ai une erreur 
    $.each(doo,this)('bonjour') // erreur aussi
    Et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var doo={ truc: function(param){alert(param)} ,machin: function(param){alert('encore\n'+param)} }
    doo.truc('hello')
    $.each(doo,function(foo){this(foo)}  )
    le paramètre passé est la clef ????
    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
    Bon j'ai finalement trouvé une syntaxe qui fonctionne et m'ouvre pas mal de possibilités de methodes de traitement engroupe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var doo={ truc: function(param){alert(param)} ,machin: function(param){alert('encore\n'+param)} }
    $.each(doo,function(){this('bonjour')}  )
    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
    Et en reprenant le coup de la clef trouvé par hasard :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var doo={ jules: function(key,param){alert(param+' ' +key)} ,roger: function(key,param){alert(param+'\n'+key)} }
    $.each(doo,function(key){this(key,'bonjour')}  )
    étonnant non ?
    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
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Salut Spaffy,

    rien d'étonnant à cela (en tout cas, je connaissais ce comportement), par contre, deux trois choses) :

    Citation Envoyé par SpaceFrog Voir le message
    En revanche une chose m'échappe, pourquoi ceci ne fonctionne-t-il pas ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var doo={ truc: function(param){alert(param)}  }
    doo.truc('hello') // j'ai bien un hello 
    $.each(doo,this('bonjour')) //j'ai une erreur 
    $.each(doo,this)('bonjour') // erreur aussi
    Et avec ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var doo={ truc: function(param){alert(param)} ,machin: function(param){alert('encore\n'+param)} }
    doo.truc('hello')
    $.each(doo,function(foo){this(foo)}  )
    le paramètre passé est la clef ????
    C'est normal qu'il te passe la clé, soit dans le callback du each tu ne passe aucun paramètre, et dans ce cas this référence l'élément courant du tableau, soit tu passe des paramètres (index, valeur) ou pour JSON (clé, valeur), dans ton cas, tu ne récupérais que la clé.

    Par contre il faut être vigilant, le this ne sera pas du même type selon que l'on fasse l'un ou l'autre. Je m'explique:

    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
     
     
    // V1
    // Array
    $.each([1, 2, 3], function() {
        alert(typeof(this));    // Retourne "object"
    });
     
    $.each([1, 2, 3], function(value, index) {
        alert(typeof(value));   // Retourne "number"
    });
     
    // JSON
    $.each({un: 1, deux: 2, trois: 3}, function() {
        alert(typeof(this));    // Retourne "object"
    });
     
    $.each({un: 1, deux: 2, trois: 3}, function(key, value) {
        alert(typeof(value));   // Retourne "number"
    });
     
    // V2
    // Array
    $.each([function() { alert("F1"); }, function() { alert("F2"); }, function() { alert("F3"); }], function() {
        alert(typeof(this));    // Retourne "function"
    });
     
    $.each([function() { alert("F1"); }, function() { alert("F2"); }, function() { alert("F3"); }], function(value, index) {
        alert(typeof(value));    // Retourne "function"
    });
     
    // JSON
    $.each({one: function() { alert("F1"); }, two: function() { alert("F2"); }, three: function() { alert("F3"); }}, function() {
        alert(typeof(this));    // Retourne "function"
    });
     
    $.each({one: function() { alert("F1"); }, two: function() { alert("F2"); }, three: function() { alert("F3"); }}, function(key, fn) {
        alert(typeof(fn));    // Retourne "function"
    });
    Et ceci explique cela :

    Citation Envoyé par SpaceFrog Voir le message
    Bon j'ai finalement trouvé une syntaxe qui fonctionne et m'ouvre pas mal de possibilités de methodes de traitement engroupe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var doo={ truc: function(param){alert(param)} ,machin: function(param){alert('encore\n'+param)} }
    $.each(doo,function(){this('bonjour')}  )


    ++
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

  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
    je tombe donc bien de la dernière pluie

    je recode donc comme ceci avec clef valuer et paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var doo={ jules: function(key,val,param){alert(val+' ' +key+param)} ,roger: function(key,val,param){alert(val+'\n'+key+ param)} }
    $.each(doo,function(key){this(key,'bonjour',' et pis des moules ')}  )
    Plus ça va et plus j'aime JQuery
    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
    Rédacteur
    Avatar de Arnaud F.
    Homme Profil pro
    Développeur COBOL
    Inscrit en
    Août 2005
    Messages
    5 183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur COBOL
    Secteur : Finance

    Informations forums :
    Inscription : Août 2005
    Messages : 5 183
    Par défaut
    Citation Envoyé par SpaceFrog Voir le message
    je tombe donc bien de la dernière pluie


    Meuh non, je l'ai découvert récemment aussi et c'est vrai que le comportement surprend.

    Je ne comprend pas pourquoi ils retournent un object pour les types de base alors que le type function est bien respecté (quelque soit le type de callback).

    Citation Envoyé par SpaceFrog Voir le message
    je recode donc comme ceci avec clef valuer et paramètre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var doo={ jules: function(key,val,param){alert(val+' ' +key+param)} ,roger: function(key,val,param){alert(val+'\n'+key+ param)} }
    $.each(doo,function(key){this(key,'bonjour',' et pis des moules ')}  )
    Plus ça va et plus j'aime JQuery
    C'est une possibilité oui en effet.

    jQuery est bien, y a de quoi l'aimer, mais faut bien maîtriser le JS quand même pour faire attention au subtilité du genre, les comprendre et surtout pouvoir les exploiter pleinement...
    C'est par l'adresse que vaut le bûcheron, bien plus que par la force. Homère

    Installation de Code::Blocks sous Debian à partir de Nightly Builds

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

Discussions similaires

  1. Nos petits trucs utiles de développeurs
    Par Droïde Système7 dans le forum Débuter
    Réponses: 192
    Dernier message: 23/10/2022, 19h43
  2. Thread "Nos petits trucs utiles de.." cadenassé
    Par Droïde Système7 dans le forum Débuter
    Réponses: 8
    Dernier message: 22/02/2012, 11h45
  3. [Lazarus][Source] Petit outil utile : XPM viewer
    Par Clandestino dans le forum Lazarus
    Réponses: 1
    Dernier message: 30/06/2007, 17h26
  4. Petit truc tout simple que je comprend pas
    Par Olaf MENJI dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 29/11/2005, 16h56

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