Зачем возвращать это.каждый (функция ()) в плагинах jQuery?


некоторые из учебников и примеров, которые я видел для разработки плагинов jQuery, как правило, возвращают

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

в конце функции, которая создает экземпляр плагина, но мне еще предстоит увидеть какие-либо рассуждения, это просто кажется стандартом, которому все следуют. Может ли кто-нибудь просветить меня относительно обоснования этой практики?

Edit: для уточнения мой вопрос был не о том, почему вернуть это, а почему плагин должен вернуться этот.каждый.

5 70

5 ответов:

при фильтрации элементов с помощью селектора ($('.myclass')), Он может соответствовать более чем один элемент.
С each, вы перебирайте все наборные элементы и ваш код применяется ко всем из них.

jQuery поддерживает "цепные методы", что означает, что большинство функции jQuery должны возвращать this. .each() возвращает this, и если вы хотите $('selector').yourPlugin().css(...) чтобы работать, вы должны return this.

позвольте мне показать вам два "эквивалентных" фрагмента кода, которые могли бы прояснить ваш вопрос:

С функцией jQuery "each":

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

без функции jQuery "each":

(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);

Итак, each функция используется для применения некоторого кода ко всем элементам, содержащимся в ).

когда вы пишете плагин, вы расширяете объект jQuery, и потому, что объект jQuery-это последовательность возврата this.each(function () { }); Так что ваш плагин выполняется для каждого элемента последовательности.

короче говоря, это позволяет вам воспользоваться цепочкой, так как она возвращает все, что было сделано до сих пор, так что следующий .anyMethod() может действовать на измененные / модифицированные элементы.



Кроме того, взгляните на эти ссылки, они дадут вам много информации о разработке плагинов 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

и вот, у вас есть хороший веб-приложение, которое поможет вам перейти начать свой jQuery Плагины. http://starter.pixelgraphics.us/