2011-01-31 2 views
0

最初のjQueryプラグインを作成しようとしています。私はこれをしなかったjQueryプラグインのドキュメントを次に示します。プラグインは.fnを使用しても機能しませんが、残しておけば

(function($) { 
    $.fn.selection = function(array, n) { ... }; 
}(jQuery)); 

しかし、私はこのようないくつかのコードでそれを実行しようとすると:

var array = [5, 2, 1, 5, 9]; 
alert($.selection(array, 2)); 

私はエラーUncaught TypeError: Object function (j,s){return new b.fn.init(j,s)} has no method 'selection'を取得します。しかし

、私はこのような.fnを失う:

(function($) { 
    $.selection = function(array, n) { ... }; 
}(jQuery)); 

すべてが動作します。なぜ、jQueryのドキュメントのようにオブジェクトをjQuery.fnに追加しても、元のサンプルの作業はできません。

答えて

2

$の.Fnをすなわち$(「...」)から作成されたjQueryのオブジェクトに使用されたプロトタイプです。

$は、jQueryのファクトリと名前空間です。

ので

$.mymethod = function(){} 

$.mymethod() 

を通じて呼び出すことができます。しかし

$.fn.mymethod = function() { this.remove(); } 

は次のように呼び出すことができます。

var divs = $(".mydivs"); 
divs.mymethod(); 

2番目の例ではMyMethodは、オブジェクトとしてjQueryの選択を使用して呼び出され、一致するすべてのdivを除去するであろう。

もっとここで読む:

http://docs.jquery.com/Plugins/Authoring

1

あなたが$.fn.selectionを使用すると、関数はjQueryのオブジェクトに対してのみ有りでは$("<SOME_SELECTOR>").selection

+0

ん、私は直接jQuery' 'に機能を追加するプラグインの互換性の面で正しいことをやっている意味ですか? – Rich

+1

必要なのは、text()、html()などのような特定のコンテキストを必要としない関数であれば、2番目の方法は問題ありません。 – Chandu

+1

@Rich、2番目のソリューションはC#の静的メソッドと似ていますが、jQuery型のオブジェクトでは機能しませんが、メソッドを入れるために名前空間としてjQueryを使用します。 –

関連する問題