Einige der Tutorials und Beispiele, die ich für die Entwicklung von jQuery-Plugins gesehen habe, kehren in der Regel zurück
this.each(function () {
//Plugin code here
});
Am Ende der Funktion, die das Plugin instanziiert, aber ich habe noch keine Argumentation dahinter, scheint es nur ein Standard zu sein, dem jeder folgt. Kann mich jemand über die Gründe für diese Praxis aufklären?
Bearbeiten: Zur Verdeutlichung war meine Frage nicht, warum dies zurückgegeben werden sollte, sondern warum das Plugin dies zurückgeben sollte.
jquery
jquery-plugins
Corey Sunwold
quelle
quelle
this
wäre eine Rückkehr eine weitaus bessere Idee.Antworten:
Wenn Sie Elemente mit einem Selektor (
$('.myclass')
) filtern , kann er mit mehr als nur einem Element übereinstimmen.Mit
each
iterieren Sie über alle übereinstimmenden Elemente und Ihr Code wird auf alle angewendet.quelle
return
dafür, Verkettung zuzulassen ...each
.jQuery unterstützt "verkettbare Methoden", was bedeutet, dass die meisten jQuery-Funktionen zurückgegeben werden sollten
this
..each()
kehrt zurückthis
, und wenn Sie arbeiten möchten$('selector').yourPlugin().css(...)
, sollten Siereturn this
.quelle
Lassen Sie mich Ihnen zwei "äquivalente" Codeteile zeigen, die Ihre Frage klären könnten:
Mit jQuery "each" -Funktion:
(function($) { $.fn.mangle = function(options) { return this.each(function() { $(this).append(' - ' + $(this).data('x')); }); }; })(jQuery);
Ohne jQuery "jede" Funktion:
(function($) { $.fn.mangle = function(options) { var objs = this; for (var i=0; i<objs.length; i++) { var obj = objs[i]; $(obj).append(' - ' + $(obj).data('x')); }; return this; }; })(jQuery);
Grundsätzlich wird die
each
Funktion verwendet, um Code auf alle imthis
Objekt enthaltenen Elemente anzuwenden ( wiethis
normalerweise auf eine Gruppe von Elementen verweist, die von einem jQuery-Selektor zurückgegeben werden ) und den Verweis auf zurückzugebenthis
( da dieeach
Funktion immer diesen Verweis zurückgibt, um Verkettungsaufrufe zu ermöglichen). )Als Randnotiz : Der zweite Ansatz ( -
for
loop- ) ist schneller (insbesondere bei alten Browsern) als der vorherige ( -each
function- ).quelle
Wenn Sie ein Plugin schreiben, erweitern Sie das jQuery-Objekt. Da das jQuery-Objekt eine Sequenz ist, geben Sie es zurück,
this.each(function () { });
sodass Ihr Plugin für jedes Element der Sequenz ausgeführt wird.quelle
each
und dann zurückkehrenthis
. Es funktioniert, weileach
auch zurückkehrtthis
.Kurz gesagt, Sie können die Verkettung nutzen, da alles zurückgegeben wird, was bisher getan wurde, damit das nächste
.anyMethod()
auf die geänderten / modifizierten Elemente einwirken kann.Schauen Sie sich außerdem diese Links an, die Ihnen viele Informationen zur Entwicklung des jQuery-Plugins geben.
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
Und hier haben Sie eine schöne webbasierte App, mit der Sie Ihre jQuery-Plugins sofort starten können. http://starter.pixelgraphics.us/
quelle