0

命名規則に苦労しているので、DOM要素のキャッシュ変数である変数の規則を考え出したいと思います。

これまでのところ、私はこれを使用するように進んでいます:

window.x = $('#x');

もちろん、これでグローバルスコープになりますが、私の慣例によれば、それで問題ありません。

しかし、それに関する問題は、window.xを見て、それが$('#x')のキャッシュ変数であることを私に伝えないことです。だから今私が実験したいのは、これらの値を保存するためにjQueryプラグイン技術を使用することです。何かのようなもの:

;(function($, window, undefined) {
    $.fn.x = function() {
        return $('#x');
    }
})(jQuery, window);

そうすれば、$ x.val()を参照でき、$ xが$('#x')DOM要素のキャッシュであることがすぐにわかります。

Q:$('#x')セレクターの戻り値であるxというプラグインを作成するにはどうすればよいですか?私はそれを正しくやっていますか?さて、あなたは(あなたの最高のOffice Spaceのナレーションで)「これは恐ろしい考えです」と言うかもしれませんが、私はただ実験しています。

4

1 に答える 1

2

DOM要素をキャッシュする理由が思いつかない。手始めに、jQuery IDセレクターを使用している場合、それらは最速のタイプのセレクターであるため、DOM要素をキャッシュする必要はありません。この例でグローバル名前空間に追加する場合は、IDが「x」の要素を選択するためのショートカットまたはエイリアスを作成するだけです。私のコードでは、即時呼び出し関数式(IIFE)を使用して、コードの単一のスコープ部分をカプセル化します。繰り返し参照される場合は、グローバル変数を最初に配置します。次に例を示します。

// An immediately-invoked function expression wraps all JavaScript code to keep it scoped to this module.
(function ($) {
    // Closure-local variables.
    var $grid;
    var $table;
    // etc.

    // Bind an initialize event. Will be called when this code needs to execute.
    $(document).on('initialize', initialize);

    // Initialize the global variables.
    function initialize() {     
        $grid = $('#grid');
        $table = $('#table');

        // other setup...
    }

})(jQuery);

ページが最初に読み込まれたときにトリガーされる初期化イベントを使用します。これにより、グローバル変数が設定され、IIFEが設定されます。IIFEは、コードを他のすべてのコードから分離し、「キャッシュされた」要素は、初期化イベントで設定されたグローバル変数にすぎないため、繰り返し呼び出す必要はありません。

于 2013-03-21T19:21:55.290 に答える