我有一个非常老旧的未维护插件,其结构大致如下:
插件本身可以正常工作,但是我需要访问一些原型方法。
var $el = $.find('myEl');
$el.searchlight(foo, bar);
$el.clearResults() //this throws an exception
当我调用原型方法时,会得到该方法不存在的异常。我是否对原型完全犯了错,还是我只是以错误的方式使用它(如果需要的话,我可以破解该库,因为它已经有7年没有维护了)。
另一个问题是如何使初始化程序返回元素本身,是否只需要在$ .fn.searchlight中添加“ return this.each”作为最后一条语句?
最佳答案
为了解决这个问题,您可以将插件的实例存储在元素的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