编写插件的目的是 给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,方便后期维护和提高开发效率。
一 ,插件的种类
jQuery插件主要分3种类型:
1. 封装对象方法的插件
这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。
2. 封装全局函数的插件
可以将独立的函数加到jQuery命名空间之下。比如jQuery.ajax() ,jQuery.trim()方法等,都是jQuery内部作为全局函数的插件而附加到内核上去的。
3. 选择器插件
个别情况下,会需要用到选择器插件。虽然jQuery的选择器非常强大,但还是会需要扩充一些自己的选择器,例如用color(red)来选择所以红色字的元素之类的想法。
二 , 插件的基本特点
1 . jQuery插件的文件名推荐命名为jquery.[插件名].js,以免和其他javascript库插件混淆,例如,命名为jquery.color.js
2. 所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上。
3. 在插件内部,this指向的是当前通过选择器获取的jQuery对象
4. 所有的方法 或函数插件,都应当以分号结尾,否则压缩的时候可能出现问题。为了更稳妥些,甚至可以在插件头部先加上一个分号,以免他人的不规范代码给插件带来影响。
5. 插件应该返回一个jQuery对象,以便保证插件的可链式操作。除非插件需要返回的是一些需要获取的变量。
6. 避免在插件内部使用$作为jQuery对象的别名,而应使用完整的jQuery来表示,这一可以避免冲突。当然,也可以利用闭包来回避这个问题。
三. jQuery插件的机制
1 . 常见的插件结构
;(function($){
//此处编写jQuery插件代码
})(jQuery);
2 . jQuery提供了两个用于扩展jQuery功能的方法,即 jQuery.fn.extend()方法 和 jQuery.extend()方法,
jQuery.extend() 方法除了可以扩展jQuery对象之外,还有一个 很强大的功能,就是用于扩展 已有的Object对象
3 . jQuery的两种扩展方法的两种扩展形式
jQuery.fn.extend():
A:
;(function($){
$.fn.extend({
"color":function(val){
//插件代码
}
});
})(jQuery);
B:
;(function($){
$.fn.color=function(val){
//插件代码
};
})(jQuery);
jQuery.extend()方法:这类插件是在jQuery命名空间内部添加一个函数。这类插件只是普通的函数,没有特别需要注意的地方
A:
;(function($){
$.extend({
ltrim : function(val){
return (val || "").replace(/^\s+/g, "");
},
});
})(jQuery);
B:
;(function($){
$.ltrim = function(val){
return (val || "").replace(/^\s+/g, "");
},
})(jQuery);
4. 利用$.extend()方法对已有对象进行扩展
jQuery.extend(target,obj1,...[objN])
用一个或多个其他对象来扩展一个对象,然后返回被扩展的对象。
例如,合并settings对象和options 对象,修改并返回settings对象。
var settings = {validate:false,limit:5,name:"foo"};
var options = {validate:true,name:"bar"};
var newOptions = jQuery.extend(settings, options);
结果为:
newOptions = {validate:true, limit:5, name:"bar"}
jQuery.extend()方法经常被用于设置插件方法的一系列默认参数,例如,
function foo(options) {
options = jQuery.extend({
name:"bar",
length:5,
dataType:"xml" /*默认参数*/
}, options); /*这里的options为传递进来的参数*/
}
如果用户调用foo()方法的时候,在传递的参数options对象中设置了相应的值,那么就使用设置的值,否则使用默认值。