0

我正在为命名约定而苦苦挣扎,我想为任何作为 DOM 元素缓存变量的变量制定一个约定。

到目前为止,我已经开始使用这个:

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

当然,这会将其置于全局范围内,但根据我的惯例,没关系。

但问题在于查看 window.x 并没有向我传达它是 $('#x') 的缓存变量。所以现在我想尝试的是使用 jQuery 插件技术来存储这些值。就像是:

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

这样,我可以引用 $x.val(),它会立即告诉我 $x 是 $('#x') DOM 元素的缓存。

问:如何创建一个名为 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 回答