要编写 jQuery 插件,首先向 jQuery.fn 对象添加一个新的函数属性,其中该属性的名称是您的插件的名称:
jQuery.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
以上是最简单的插件制作。虽然有一个特定的步骤要遵循,但使用闭包是避免任何$
与任何其他库(如 mootools、原型等)发生任何美元符号冲突的最佳实践。
为了确保您的插件不会与可能使用美元符号的其他库发生冲突,最好将 jQuery 传递给将其映射到美元符号的 IIFE(立即调用函数表达式),这样它就不会被覆盖由另一个库在其执行范围内。
(function( $ ) {
$.fn.myPlugin = function() {
// Do your awesome plugin stuff here
};
})(jQuery);
现在在这个闭包中,我们可以随意使用美元符号代替 jQuery。
命名空间:
正确命名插件是插件开发的一个非常重要的部分。命名空间正确地确保您的插件被位于同一页面上的其他插件或代码覆盖的可能性非常低。命名空间还使您作为插件开发人员的生活更轻松,因为它可以帮助您更好地跟踪您的方法、事件和数据。
插件方法
(function( $ ){
$.fn.tooltip = function( options ) {
// THIS
};
$.fn.tooltipShow = function( ) {
// IS
};
$.fn.tooltipHide = function( ) {
// BAD
};
$.fn.tooltipUpdate = function( content ) {
// !!!
};
})(jQuery);
这是不鼓励的,因为它会使$.fn
命名空间变得混乱。为了解决这个问题,您应该将插件的所有方法收集在一个中object literal
,并通过将方法的字符串名称传递给插件来调用它们。
(function( $ ){
var methods = {
init : function( options ) {
// THIS
},
show : function( ) {
// IS
},
hide : function( ) {
// GOOD
},
update : function( content ) {
// !!!
}
};
$.fn.tooltip = function( method ) {
// Method calling logic
if ( methods[method] ) {
return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));
} else if ( typeof method === 'object' || ! method ) {
return methods.init.apply( this, arguments );
} else {
$.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );
}
};
})( jQuery );
// calls the init method
$('div').tooltip();
// calls the init method
$('div').tooltip({
foo : 'bar'
});