Pourquoi renvoyer this.each (function ()) dans les plugins jQuery?

Certains des tutoriels et exemples que j’ai vus pour développer des plugins jQuery ont tendance à revenir

this.each(function () { //Plugin code here }); 

A la fin de la fonction qui instancie le plugin mais je n’ai pas encore vu de raisonnement, cela semble juste être un standard que tout le monde suit. Quelqu’un peut-il m’éclairer sur le raisonnement derrière cette pratique?

Edit: Pour plus de clarté, ma question n’était pas de savoir pourquoi renvoyer ceci, mais plutôt pourquoi le plugin devrait renvoyer this.each.

Lorsque vous filtrez des éléments avec un sélecteur ( $('.myclass') ), il peut correspondre à plus d’un élément.
Avec each , vous parcourez tous les éléments correspondants et votre code est appliqué à tous.

jQuery supporte les “méthodes chaînables”, ce qui signifie que la plupart des fonctions jQuery doivent renvoyer this . .each() renvoie this , et si vous voulez que $('selector').yourPlugin().css(...) fonctionne, vous devriez return this .

Laissez-moi vous montrer deux morceaux de code “équivalents” qui pourraient clarifier votre question:

Avec jQuery “chacun” fonction:

 (function($) { $.fn.mangle = function(options) { return this.each(function() { $(this).append(' - ' + $(this).data('x')); }); }; })(jQuery); 

Sans jQuery “chacun” fonction:

 (function($) { $.fn.mangle = function(options) { var objs = this; for (var i=0; i 

Donc, fondamentalement, each fonction est utilisée pour appliquer du code à tous les éléments contenus dans this object ( car this fait généralement référence à un groupe d'éléments renvoyés par un sélecteur jQuery ) et renvoie la référence à this ( each fonction renvoyant toujours cette référence - pour permettre le chaînage des appels- )

En guise de remarque : la seconde approche ( - for loop- ) est plus rapide (notamment sur les anciens navigateurs) que l'ancienne ( - each fonction- ).

Lorsque vous écrivez un plug-in, vous étendez l’object jQuery et, comme l’object jQuery est une séquence, vous retournez this.each(function () { }); afin que votre plugin soit exécuté pour chaque élément de la séquence.

En bref, cela vous permet de tirer parti du chaînage, car il retourne tout ce qui a été fait jusqu’à présent, de sorte que le prochain .anyMethod() puisse agir sur les éléments modifiés / modifiés.

De plus, regardez ces liens, ils vous donneront beaucoup d’informations sur le développement du plugin jQuery.

http://www.webresourcesdepot.com/jquery-plugin-development-10-tutorials-to-get-started/
http://www.learningjquery.com/2007/10/a-plugin-development-pattern
http://snook.ca/archives/javascript/jquery_plugin

Et ici, vous avez une belle application Web qui vous aide à démarrer vos plug-ins jQuery. http://starter.pixelgraphics.us/