1 jQuery插件的类型
jQuery插件主要分为三种类型;
1.1 jQuery方法
这种类型的插件是把一些常用或重复使用的功能定义为函数,然后绑定到jQuery对象上,从而成为jQuery对象的一个扩展方法。
1.2 全局函数
也可以把自定义的功能函数独立附加到jQuery命名空间下,从而作为jquery作用域下的一个公共的函数使用。如,jquery的ajax()方法就是利用这种途径内部定义的全局函数。
由于全局函数没有被绑定到jQuery对象上,故不能够在选择器获取的jQuery对象上调用。需要通过jQuery.fn()或者$.fn()方式进行引用。
1.3 选择器
自定义选择器。
2 解析jQuery插件机制
为了方便用户创建插件,jquery自定义了jQuery.extend()和jQuery.fn.extend()方法。
jQuery.extend()方法能够创建全局的函数或者选择器。
jQuery.fn.extend()方法能够创建jquery对象方法。
|
jQuery.extend()和jQuery.fn.extend()方法都包含一个参数,该参数仅接受名/值对结构的对象,其中名表示函数或方法名,而值表示函数体。
jQuery.extend()方法除了可以创建插件外,还可以用来扩展jQuery对象。如,调用jQuery.extend()方法把对象a和b合并为一个新的对象,并返回合并对象将其值赋给变量c。
在合并操作中,如果存在同名属性,则后面参数对象的属性值会覆盖前面参数对象的属性值。
|
在实际开发中,常常使用jQuery.extend()方法为插件方法传递系列选项结构的参数。
|
jQuery.extend()方法的对象合并机制,比传统的逐个检测参数不仅灵活且简洁,使用命名参数添加新选项也不会影响已编写的代码风格,让代码变得更加直观明白。
3 创建jQuery全局函数
就是jQuery对象的方法,实际上就是位于jQuery命名空间内部的函数。
这些函数有一个共同的特征,既是不直接操作DOM元素,而是操作javascript的非元素对象,或者执行其他非对象的特定操作,如jquery的each()函数和noConflict()函数。
Ajax()方法,它便是一个典型的jquery全局函数,$.ajax()所做的一切都可以通过调用名称ajax()的全局函数来实现。
使用jQuery.extend()方法可以扩展jQuery对象的全局函数。当然我们也可以使用下面的方法快速定义jQuery全局函数。
|
也既是说,如果要向jQuery命名空间上添加一个函数,只需要将这个新函数指定为jQuery对象的一个属性即可。其中jQuery对象名也可以简写为$。
考虑到jQuery插件越来越多,因此在使用时可能会遇到自己的插件名与第三方插件名发生冲突。为了避免这个问题,建议把自己的插件都封装在一个对象中。
|
4 使用jQuery.fn对象创建 jquery对象方法
创建全局函数只需要通过为jQuery对象添加属性即可,而创建jQuery对象方法也可以通过为jQuery.fn对象添加属性来实现。实际上jQuery.fn对象就是jQuery.prototype原型对象的别名。
|
|
5 使用extend()方法创建jQuery对象方法
jQuery.extend()方法能够创建全局函数,而jQuery.fn.extend()方法可以创建jQuery对象方法。
jQuery.fn.extend({
test : function(){
return this.each(function(){
alert(this.nodeName);
});
}
});
6 封装jQuery插件
封装jQuery插件的第一步是定义一个独立域,代码如下所示:
(function($){
//自定义插件代码
})(jQuery);
确定创建插件类型,选择创建方式。
(function($){
$.extend($.fn,{ //jquery对象方法扩展
//函数列表})
})(jQuery);
(function($){
$.extend($.fn,{ //jquery对象方法扩展
color : function(options){ Var options =$.extend({
bcolor:’white’,
fcolor:’black’
},options); //函数体
}
})
})(jQuery);
(function($){
$.extend($.fn,{ //jquery对象方法扩展
color : function(options){ Var options =$.extend({
bcolor:’white’,
fcolor:’black’
},options); return this.each(function(){
$(this).css(‘color’,options.fcolor);
$(this).css(‘backgroundColor’,options.bcolor);
});}
})
})(jQuery);
$(function(){
$(“h1”).color({ Bcolor:’#eea’,
fcolor:’red’});
})
7 优化jQuery插件—开放公共参数
续上面的代码为例进行说明,把其中的参数默认值作为$.fn.color对象的属性单独进行设计,然后借助jQuery.extend()方法覆盖原来参数选项即可。
|
8 优化jQuery插件—开发部分功能
继续以上一节的示例为基础,为其添加一个格式化的扩展功能,这样用户在设置颜色的同时,还可以根据需要适当进行格式化功能设计,如加粗、斜体、放大等功能操作。
|
9 优化jQuery插件—保留插件隐私
若插件包含很多函数,在设计时我们希望这么多函数不搅乱命名空间,也不会被完全暴露,惟一的方法就是使用闭包。为了创建闭包,可以将整个插件封装在一个函数中。
继续以上一个为例,为了验证用户在调用color()方法时所传递的参数是否合法,我们不妨在插件中定义一个参数验证函数,但是该验证函数是不允许外界侵入或者访问的,此时我们可以借助闭包把它隐藏起来,只允许在插件内部进行访问。
|