3
(function($) {
    $.fn.myFunction = function(config) {

        var defaults = {
            setting1: 'myDiv',
            setting2: ''
        };
        var config = $.extend(defaults, config); 

        //code here


    };

})(jQuery)


$(document).ready(function() {

    $.fn.myFunction({
        setting1: 'myDiv',
        setting2: ''
    });

});

これは私がjQueryプラグインを使用してきた方法ですが、最近、次のように使用する必要があることを学びました:

$('#myDiv').myFunction({
    setting1: 'myDiv',
    setting2: ''
}); 

1)これにより、$(this)forの使用が可能になると$('#myDiv')思いますか?

2)$(document).ready(function()必須ですか?

3) この jQuery 関数を使用してきた方法について何か有害なことはありますか?

4)$('#myDiv').myFunction()適切な使用法である場合、それが単にドキュメントの準備ができたときに実行する関数である場合、関数をどのように呼び出しますか -ここで私の使用法を参照してください: https://stackoverflow.com/a/12316349/1455709。これは単に関数の使い方が間違っているのでしょうか?

4

2 に答える 2

2
  1. return thisはい、関数内からの場合は適切なチェーンと同様です。

  2. はい、DOM がロードされる前にコードが実行される場合。

  3. それは本当の jQuery ではありません。人々が期待するようには機能しません。誰かがそれを as と呼ぶことができ$('#myDiv').myFunction()、期待どおりに動作しません。

  4. いつでも実行できる関数が必要な場合は、その関数を jQuery プロトタイプ ( $.fn) に追加しないでください。代わりに、たとえば$、セレクターを必要としない他の jQuery 関数のように追加することができます。$.trim次に、次のように呼び出すことができます。$.myFunction(options);

于 2012-09-18T07:39:54.717 に答える
2

通話$.fn.myFunction()と通話$('#myDiv').myFunction()は別物です。正しいか間違っているかはありません - それはあなたが何をしているかに依存します.

$.fn.myFunction() の呼び出し

これは本質的に静的関数であり、必要に応じてそのように使用できます。jQuery の世界で.fnは、.prototype$.fn.myFunction()呼び出すのと同じjQuery.prototype.myFunction()です。許可されていますが、特定の jQuery オブジェクトに関連付けられていない静的関数呼び出しです。静的関数呼び出しだけが必要な場合は、これを行うことができますが、これは通常、jQuery プロトタイプの使用方法ではなく、一般的にはお勧めしません。静的関数だけが必要で、jQuery 名前空間を使用したい場合は、次のようにするだけです。

$.myFunction = function(args) {/* your code here */};

そしてそれを次のように呼び出します:

$.myFunction();

プロトタイプを使用する必要はまったくありません。

通話中$('#myDiv').myFunction()

プロトタイプ (たとえば.fn、jQuery の世界では、実際の jQuery オブジェクトにメソッドを追加する場合に使用されます。

これを行う$('#myDiv').myFunction()と、ライブ jQuery オブジェクトのメンバー関数になります。this実装内で参照できます。myFunction()これは、この場合、に対応する DOM オブジェクトを保持する jQuery オブジェクトになりますid="myDiv"。メソッドから jQuery オブジェクトを返す場合は、連鎖も使用できます。

どちらを使用しますか?

コードが jQuery オブジェクトで動作する場合、それはライブ jQuery オブジェクトのメソッドである必要がありthis、jQuery オブジェクト インスタンス データを取得するためにアクセスする必要があり、それを$.fn.myFunction = function() {}; and call it as$('#myDiv').myFunction()`として宣言する必要があります。 .

コードが jQuery オブジェクトを操作せず、呼び出す単なるユーティリティ関数であり、常に jQuery オブジェクトを操作するとは限らない場合は、 として宣言し、 として$.myFunction = function() {};呼び出す必要があります$.myFunction()

于 2012-09-18T07:45:56.487 に答える