JQuery插件和原型,暴露方法

时间:2016-06-13 12:10:24

标签: javascript jquery prototype

我有这个非常老的无保留插件,简而言之就是这样构造:

plugin code

插件本身工作正常,但我需要访问一些原型方法。

var $el = $.find('myEl');
$el.searchlight(foo, bar);
$el.clearResults() //this throws an exception

当我调用原型方法时,我得到一个例外,该方法不存在。我是否在原型上遇到了完全错误的问题,或者我只是以错误的方式使用它。(如果需要,我可以破解图书馆,因为它已经7年没有维护了。)

另一个问题是如何让初始化程序返回元素本身,我只需要添加'返回this.each'作为$ .fn.searchlight中的最后一句话?

1 个答案:

答案 0 :(得分:1)

要解决此问题,您可以将插件实例存储在元素的data属性中。然后,您可以根据需要调用该函数上的方法,如下所示:

// in plugin:
$.fn.searchLight = function(url, options) {
    return this.each(function() {
        $(this).data('searchlight', new SearchLight(this, url, options));
    });
};

// in the calling code, instantiate
var $el = $('.searchLightElement').searchLight(foo, bar);

// then use the methods of the plugin
$el.data('searchlight').clearResults();

Working example