我希望标题清楚。
所以我有一个复杂的大插件,它将 div 转换为可排序的小部件,但我遇到了一些问题,如果有人向 DOM 广告一个新的 div,插件必须再次运行才能将新添加的 div 转换为一个小部件,但这意味着它将在所有已经转换的 div 上运行它。那么如何防止这种情况发生。可以检查被包装的元素,所以这没什么大不了的,但是效果和其他东西会运行几次(取决于向 DOM 添加了多少 div)。
我对如何使用插件有了一个简单的想法。(抱歉不能在这里发布完整的插件)
不寻找包含检查添加类的解决方案,因为这个问题是动画等(如点击事件)
// div(小部件)
<div class="widget">
<div></div>
</div>
<div class="widget">
<div></div>
</div>
...
...
...
// 插件(基本思想)
;(function($, window, document, undefined){
$.fn.plugin = function(options) {
options = $.extend({}, $.fn.plugin.options, options);
return this.each(function() {
var obj = $(this);
// for this example we wrap the div
obj.find(options.widgets).wrap('<div class="wrapped-widget"></div>');
// add a link to the widget
options.widgets.prepend('<a href="#" class="link">link</a>')
// run the animation just once
options.widgets.on('click', '.link', function(){
$(this).next().animate({height: 'toggle'});
});
});
};
$.fn.plugin.options = {
widgets: '.widget',
// etc
};
})(jQuery, window, document);
// 插件调用
$('body').plugin({widgets: '.widget'});
// 添加新的 div 到 DOM
$('#add').click(function(){
$('body').append('<div class="widget"><a href="#" class="link">link</a><div></div></div>');
$('body').plugin({widgets: '.widget'});
});