2011-10-17 9 views
1

jQueryで新しい連鎖メソッドを作成するにはどうすればよいですか?私はjQueryのに非常に手続きのスタイルを持っている:私は、書くことができるように新しいjqueryチェーンメソッドの作成

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

がどのように私はjQueryので.fooという()メソッドを作成します:

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

および関連時点で - されます簡単な方法(Visual StudioやNotepad ++など)を使ってFoo($("#selector"));をすべて見つけて置き換えて$("#selector").foo();に置き換えますか?

答えて

6

あなたは、このようにカスタム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オブジェクトがドルで定義されているかどうかわからない場合は、この機能では、あなたのdefinitonをラップ:

(function($){ 
    //Within this wrapper, $ is the jQuery namespace 
    $.fn.foo = function(){ 
     //... 
    } 
})(jQuery); 
+0

セレクタが1つのマッチを返すときの処理方法を見ることができます。セレクタで複数の一致が返されたらどうしますか? –

+0

あなたがラップすると言うときは、すべてが '$ .fn.foo =(function($){// etc})(jQuery);' –

+0

@ JK。私の更新された答えを見てください。 –

1

あなたは$(this)を返す必要が推測終わりには、各機能をPF連鎖可能にする。

関数robwを使用して$(this)を返します。

関連する問題