2010-02-23 9 views
9

Les deux méthodes apparaissent à produce the same results, mais j'ai eu du mal à convaincre les gens que la seconde méthode fonctionne, car elle ne semble pas communément connue. Lors de la vérification de la source, il semble que ces deux éléments soient les mêmes en ce qui concerne la source. La deuxième méthode suit:

each: function(callback, args) { 
    return jQuery.each(this, callback, args); 
} 

Cette méthode appelle manifestement la méthode plus communément connue, ce qui signifie qu'il est tout aussi légitime. Cette compréhension est-elle correcte, ou ai-je oublié quelque chose ici?

J'ai généralement fait confiance à cette méthode, car elle ne m'a pas fait dévier des pratiques standard en ce qui concerne les sélecteurs. Avouons-le, nous sommes formés à faire:

$("p").each(); 

Il semble donc naturel de le faire:

$(obj).each(); 

que je me trompe?

+0

Je ne vois pas quel est le problème. '$ (o) .each()' appelle 'jQuery.each (this, callback, args)'. Quoi de plus de confirmation/convaincant avez-vous besoin? – voyager

+0

@voyager: Je veux juste être sûr que je ne me suis pas trompé. J'ai pensé qu'un élément comme celui-ci pourrait intéresser d'autres développeurs de jQuery, et que quelqu'un pourrait ajouter quelque chose à la distinction. – Sampson

+0

assez juste. Il semble que la différence soit plus une question de style que de fonctionnalité. Bien sûr, maintenant vous avez un endroit où pointer les utilisateurs non convaincus. – voyager

Répondre

12

La différence entre les deux est réellement exponentielle selon la façon dont vous l'utilisez.

Le premier $.each constitue un appel de fonction unique pour démarrer l'itérateur.

La seconde $(foo.vals).each fait trois appels de fonction pour démarrer l'itérateur. Le premier est le $() qui produit un nouvel ensemble d'enveloppes jQuery (Vous ne savez pas combien d'autres appels de fonctions sont effectués au cours de ce processus). Ensuite, appelez le $().each. Et enfin, il fait l'appel interne à jQuery.each pour démarrer l'itérateur.

Dans votre exemple, la différence serait négligeable, c'est le moins qu'on puisse dire. Toutefois, dans un scénario d'utilisation imbriquée, les performances risquent de devenir un problème.

Enfin, Cody Lindley dans jQuery Enlightenment ne recommande pas d'utiliser $.each pour les itérations supérieures à 1000 en raison des appels de fonction impliqués. Utilisez une boucle for(var i = 0... normale.

+0

+1 Excellente information. J'ai été particulièrement heureux d'entendre la position de CL sur le sujet comme j'ai suggéré 'for (;;)' comme alternative à '$ .each()' récemment dans une autre question. Je me sens intelligent en sachant que CL aurait pu être d'accord avec moi;) – Sampson

+0

Qu'en est-il de la raison pour laquelle $ .wach vous permet d'itérer sur n'importe quelle collection alors que '$().chacun est seulement pour l'élément jquery? –

2

Je ne suis pas sûr de ce que tout le monde dit ... mais j'utilise presque exclusivement votre deuxième méthode ici.

Venant de .NET land ... cela me semble plus logique et facilite la lecture.