0

我正在编写一个 jQuery 插件,我希望有多个功能可用,如下所示:

//Calling the "constructor"
$(element).pluginName();

//Calling the "method"
$(element).pluginName.methodName();

所以我基本上做的是这样的:

(function($, window, document, undefined) {
    //The "constructor"
    $.fn.pluginName = function() {
        //try accessing $(this)
        var meh = $(this);
    };
    //The "method"
    $.fn.pluginName.methodName = function() {
        //try accessing $(this)
        var test = $(this);
    };
})(jQuery)

现在,当我按照上面框中的描述调用它时,它适用于“构造函数”。但是当我尝试“方法”时,我得到一个错误:

TypeError: document is null
http://(url)/jquery.js
safeFrag = document.createDocumentFragment();
Line 5823

现在到有趣的部分:当我将“方法”重命名为$.fn.pluginNameMethodName(基本上,如果我删除最后一个.),我可以通过调用来调用“方法” $(element).pluginNameMethodName();

那么,我做错了什么?

我希望我的插件有多个易于访问的方法(我不希望我的插件方法被调用$(element).pluginName(methodName);)。

4

1 回答 1

1

如果您想要易于访问的方法,请让您的插件提供存储在元素上的接口。

(function($, window, document, undefined) {
    //The "constructor"
    $.fn.pluginName = function() {
        return this.each(function(){
            var obj = {
                elem: this,
                theMethod: function(){
                    var meh = this.elem;
                }
            };
            $(this).data("pluginName",obj);
        })
    };
})(jQuery)

// using it
var pluginInterface = $(theelement).pluginName().data("pluginName");
pluginInterface.theMethod();

不过,我认为$(element).pluginName(methodName);也很容易访问。(甚至更多)。

于 2013-05-23T20:25:59.390 回答