Superfish JS是here。
以下是相关代码:
$.fn.extend({
hideSuperfishUl : function() {
// ...code here...
return this;
},
showSuperfishUl : function(){
// ...code here...
return this;
}
});
问题:
$.fn.extend({...});
是否允许用户覆盖hideSuperfishUl
& showSuperfishUl
功能?如果是这样,在调用插件时更改这些方法的语法是什么样的:
<script>
$(document).ready(function() {
$('ul.sf-menu').superfish(); // How to override hideSuperfishUl &/or showSuperfishUl?
});
</script>
Superfish被写了一段时间......这仍然是允许用户覆盖插件功能功能/方法/其他的最佳方式吗?如果没有,是否有“最佳”方式?
答案 0 :(得分:2)
在这里尝试回答我自己的问题... 如果我在下面写的任何内容错误,请纠正我!;)
扩展
在我看来,这是创建jQuery最不惯用的方法 插入。它使用
jQuery.fn.extend
方法代替jQuery.fn.pluginName
:(function($){ $.fn.extend({ myPlugin: function() { return this.each(function(){ // do something }); }, myOtherPlugin: function() { return this.each(function() { // do something }); } }); })(jQuery);
如果您需要添加大量数字,您会发现此结构很有用 jQuery的插件方法。不过,我会争辩说,如果你的话 插件需要添加那么多方法,可能有更好的方法 构建其实施。
我觉得扩展方法更多地被程序员转换使用 来自其他JS库。我个人觉得简单的
$.fn.pluginName =
结构更易于阅读,更符合您在jQuery插件中通常会看到的内容。
Superfish JS使用上面引用的相同代码;简而言之,showSuperfishUl()
和hideSuperfishUl()
是jQuery $.fn
命名空间中的其他插件。
我能够覆盖所谓的功能:
jQuery(function(){
$.fn.showSuperfishUl = function() {
console.log('OMG');
return this;
};
$.fn.hideSuperfishUl = function() {
console.log('BECKY');
return this;
};
jQuery('ul.sf-menu').superfish();
});
接下来,this article说:
提供适用的辅助功能的公共访问
// plugin definition $.fn.hilight = function(options) { // iterate and reformat each matched element return this.each(function() { var $this = $(this); // ... var markup = $this.html(); // call our format function markup = $.fn.hilight.format(markup); $this.html(markup); }); }; // define our format function $.fn.hilight.format = function(txt) { return '<strong>' + txt + '</strong>'; };
我们可以轻松支持选项上的另一个属性 允许提供回调函数来覆盖的对象 默认格式。这是另一种很好的支持方式 自定义您的插件。这里显示的技术需要这个 通过实际暴露格式函数以便它可以进一步 被重新定义。有了这种技术,其他人就有可能 他们自己定制的插件覆盖,换句话说就是它 意味着其他人可以为你的插件编写插件。
$.fn.extend
和$.fn.pluginName.function
都相似,并允许最终用户轻松覆盖功能;前者将新插件添加到jQuery $.fn
命名空间,而后者是包含在单个$.fn.pluginName
命名空间中的函数。
不要将jQuery.fn对象与每个多个命名空间混为一谈 插件。
...因此,我选择的“最佳”技巧是$.fn.pluginName.function
。