2012-02-14 6 views
1

私はこれに関する専門家ではありません。これはjQueryプラグインを作成するための最初の試みです。jQueryプラグインのオーサリング - jQueryオブジェクトとjQuery.fnオブジェクトの拡張

私がしたいことは、domオブジェクトでも両方とも呼び出すことができるjQueryプラグインを作成することです。

私のプラグインは、私は以下の両方の方法で呼び出すことができるようにしたいと思いalert()に何かある場合たとえば、:

$.tcAlert('Hello World'); 
// Resulting code: 
// 
// alert('Hello World'); 
// 

$('#myDiv').tcAlert(); 
// Resulting code: 
// 
// theText = $('myDiv').text(); 
// alert(theText); 
// 

明らかにこれは非常に単純な例ですが、私はいずれかを見つけるように見えることはできませんこのようなプラグインの作成方法については、ドキュメントを参照してください。 jQuery拡張機能を作成する必要がありますか?jQuery.fn拡張機能は元の拡張機能を参照していますか?

ご協力いただきありがとうございます。ありがとうございました。

+0

あなたは、呼び出し元のコンテキストがあなたのプラグインが起動された場所によって異なりますことを心に留めておく必要があります。あなたのプラグインが何をしているかに応じて、それがどのように呼び出されたかを見るためにテストする必要があります。 –

+0

どういう意味で申し訳ありませんか? –

答えて

4

一般的に、要素を持つものを実行する関数の場合は、プラグイン形式で記述する必要があります。 $.fn.myPlugin = function() {};。単なるユーティリティ関数の場合は、それをグローバルjQuery/$オブジェクトに追加します。次のように$.myFunction = function() {};

あなたの例を書くことができます。

$.tcAlert = function(string) { 
    alert(string); 
}; 

$.fn.tcAlert = function() { 
    // call the `tcAlert` function, passing the .text() of the current element as the argument 
    $.tcAlert(this.text()); 
    // allow chaining 
    return this; 
}; 
+0

クール、これは私が思った答えです。ちょうどチェックしたかった! :) –

1

は、あなたはいつもセレクタは任意の要素にマッチしているか否かを知らないかもしれません。これを処理する

、次の手順を実行します。..

$.fn.myPlugin = function() { 

    //First check length of matched elements 

    if(this.length < 1){ 
    //standalone functionality 
    } 
    else{ 
    return this.each(function(){ 
     //do things to matched elements 
     //where, $(this) refers to current element 
    }); 
    } 

} 
関連する問題