Создайте новый метод jquery chained - PullRequest
1 голос
/ 18 октября 2011

Как вы пишете новые цепочечные методы в jQuery? У меня очень процедурный стиль в моем jQuery:

$("#SaveButton").click(function () {
    Foo($("#SubTotal"));
    Foo($("#TaxTotal"));
    Foo($("#Total"));
    Bar($("#SubTotal"));
    Bar($("#TaxTotal"));
    Bar($("#Total"));        
});

Как создать метод .foo () в jQuery, чтобы я мог написать:

$("#SaveButton").click(function () {
    $("#SubTotal,#TaxTotal,#Total").foo().bar();
});

И в связи с этим - есть ли простой способ (в Visual Studio, Notepad ++ или что-то еще) найти и заменить все Foo($("#selector")); на $("#selector").foo();?

Ответы [ 2 ]

6 голосов
/ 18 октября 2011

Вы можете определить пользовательские функции jQuery следующим образом:

$.fn.foo = function(){
    //`this` is a jQuery object, referring to the matched elements (by selector)
    return this.each(function(index, element){
        //`this` inside this function refers to the DOM element
        var $this = $(this); //`this` is wrapped in a jQuery object.
    });
}

После этого определения каждый объект $("...") будет иметь метод foo.

Если вы не уверены, определен ли объект jQuery в долларах, оберните ваше определение в эту функцию:

(function($){
    //Within this wrapper, $ is the jQuery namespace
    $.fn.foo = function(){
        //...
    }
})(jQuery);
1 голос
/ 18 октября 2011

Думаю, вам нужно возвращать $ (this) в конце каждой функции, чтобы сделать ее цепочечной.

Используйте функцию robw write и верните $ (this).

...