1

私は jQuery プラグインを作成しており、プラグインを利用するページ上のオブジェクトの数を追跡する必要があります。それ自体のインスタンスを追跡するプラグイン内に静的変数を作成する方法はありますか?

プラグインについてこれまでのところ私が持っているものは次のとおりです。

(function ($) {
    $.fn.my_plugin = function (options)
    {
        var plugin_count = 0;

        return this.each(function() {
            alert(++plugin_count);
        });
    }
}(jQuery));

そして私のページで:

<div class="plugin_div"></div>
<div class="plugin_div"></div>
<div class="plugin_div"></div>
<div class="plugin_div"></div>

<script language="javascript">
    $('.plugin_div').my_plugin();
</script>

ページが読み込まれると、「1」が表示された 4 つのアラートが表示されます。

を呼び出す要素ごとに変数がインクリメントするように、これをどのように記述できますmy_plugin()か?

編集:悪いコピーペースト ジョブを修正しました。

4

3 に答える 3

7

あなたはこれを行うことができます:

(function ($) {
    $.fn.my_plugin = function (options)
    {
        $.fn.my_plugin.count = $.fn.my_plugin.count || 0;

        return this.each(function() {
            alert(++$.fn.my_plugin.count);
        });
    }
}(jQuery));

$.fnまたは、 butを使用しない$.my_plugin.countで、プラグインのデフォルトを次のように定義することもできます。

$.my_plugin = {
    count : 0,
    defaults : {}
};

// Extend options with plugin defaults!
$.extend(options, $.my_plugin.defaults); 
于 2013-04-22T14:57:27.063 に答える
1

JavaScript では関数は第一級オブジェクトなので、任意のプロパティを保存できます。$.fn.my_plugin.whatever

もちろん、関数名を繰り返さずにこれを行うことができればさらに良いでしょarguments.calleeうが、非推奨であるため、完全な関数名を使用し続ける必要があります。

于 2013-04-22T14:57:56.073 に答える
0

「plugin_count」の宣言を関数の外に移動するだけです。

(function ($) {
    var plugin_count = 0;

    $.fn.my_plugin = function (options)
    {
        return this.each(function() {
            alert(++plugin_count);
        });
    }
}(jQuery));

これは、外部の無名関数呼び出しによって形成されたクロージャーで「plugin_count」をキャプチャします。クロージャーがそれを行う場合、明示的なオブジェクトのプロパティとしてカウントを維持する必要はありません。

于 2013-04-22T14:58:31.270 に答える