2013-11-29 61 views
1

所以我有一套jQuery插件,真正基本的东西,但我将代码拆分为插件,因为我不喜欢有一个巨大的jQuery(document).ready()函数,整个应用程序逻辑。检测“挂钩”的DOM元素

每个插件都有一个“析构函数”,它基本上是我在插件原型对象中定义的函数。这个函数解除绑定插件使用的事件,删除

插件初始化这样的插件等添加的DOM元素:

$('.element').plugin(); 

有没有什么办法可以让所有具备的要素我插件附加到他们,从另一个插件应该取代主体的HTML,所以我可以调用析构函数?

我正在考虑将每个插件实例存储在全局数组中,然后我可以从任何插件访问该数组。但是,也许有更好的方法不使用全局状态?

+0

当我建我使用[我写自定义模板(jQuery的小部件https://github.com/zzzzBov/jQuery-widget .tmpl.js /斑点/主/ jqwt/jQuery的widget.tmpl.js)。它包括扩展'$ .expr [':']',以便可以选择实例化的小部件。 – zzzzBov

回答

1

我不认为有一个现成的方法...但作为一个黑客,你可以添加一个类到你的插件中的目标元素,然后使用该类来获取所有元素与小部件初始化lke

$.fn.plugin = function(){ 
    this.addClass('my-plugin-class'); 
} 

然后初始化

$(element).plugin() 

让所有元素与插件

$('.my-plugin-class').... 

但是,如果它是一个jQuery UI控件,那么你可以使用选择$(':ui-widgetname'),看到this answer

+0

这实际上是一个好主意,然后我可以选择和销毁挂在页面某个区域的元素上的插件,如'#main .plugin' – Alex

1

Arun P Johny写的分辩想法 - 只是标记与一些特定的类名受影响的DOM元素删除你的工作的“足迹”。

我想要添加一个想法。插件是库的方法,仅此而已。如果您需要the destroyerconstructor - 只是让另一个插件吧:

$.fn.overture = function(){...};// construct 
$.fn.crescendo = function(){...};// more construct 
$.fn.quietFarewell = function(){...};// destructor for everything above 

$(...).overture().crescendo().quietFarewell();