自定义jQuery插件,有时想在DOM对象上运行,有时候不行

时间:2012-05-27 04:36:58

标签: javascript jquery jquery-plugins

在我们正在创建的网站上,我们想要将一些常规的javascript功能封装到我们自己的util jQuery插件中。我是创建自定义jQuery插件的新手,所以我发现this page是一个很好的资源。我基本上复制了那里的例子(当然还有我们自己的功能),但我发现我们有一些方法不需要在任何特定的DOM对象上运行。所以,我发现自己只是选择了这样的文件:

$(document).myPlugin("myFunction", "my", "params");

我不喜欢这样一个事实:我只是选择了我的函数中根本没有使用的任何随机元素,所以我用Google搜索了一些并找到了this question。这是很好的信息,但这是一个永远不需要DOM元素来运行该功能的情况。我想也许我可以将两者结合起来。所以,我最初的地方有这个:

(function($) {
var methods = {
//... all my methods
}

$.fn.myPlugin = function(method) {
    // Method calling logic
    if (methods[method])
    {
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    }
    else if (typeof method === 'object' || !method)
    {
        return methods.init.apply(this, arguments);
    }
    else
    {
        $.error('Method ' + method + ' does not exist on jQuery.myPlugin');
    }
};
})(jQuery);

我只是将其更改为:

(function($) {
var methods = {
//... all my methods
}

$.myPlugin = $.fn.myPlugin = function(method) {
    // Method calling logic
    if (methods[method])
    {
        return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
    }
    else if (typeof method === 'object' || !method)
    {
        return methods.init.apply(this, arguments);
    }
    else
    {
        $.error('Method ' + method + ' does not exist on jQuery.myPlugin');
    }
};
 })(jQuery);

它似乎正如我想要的那样工作。当我想调用一个不需要DOM元素的函数时,我只需要调用$.myPlugin("myFunction1", "my", "params");,当我想调用特定DOM元素上的函数时,我调用$("#elementId").myPlugin("myFunction2", "my", "params");

在这个非常冗长的解释之后,我的问题是,在这样做时是否有任何潜在的陷阱或问题需要关注?就像我说的那样,它对我来说很有用,但我想知道这样做或任何潜在的问题是否有任何问题?如果有更好的方法来完成同样的事情,请分享。谢谢!

0 个答案:

没有答案