jQuery封装插件的方法有三种:封装对象方法的插件、封装全局函数的插件、选择器插件
对象方法的插件
这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。此类插件可以发挥出jQuery选择器的强大优势,有相当一部分的jQuery的方法,都是在jQuery脚本库内部通过这种形式“插”在内核上的,例如parent()方法,appendTo()方法等。
添加一个对象扩展方法
|
|
添加多个对象扩展方法
|
|
使用$.fn.extend(obj)方法
插件中不需要默认参数
插件中需要设置一些默认参数,可以使用\$.extend()进行扩展。在后面将对\$.fn.extend()和$.extend()进行详解
全局函数的插件
可以将独立的函数加到jQuery命名空间下。如常用的jQuery.ajax()方去首尾空格的jQuery.trim()方法,都是jQuery内部作为全局函数的插件附加到内核上去的。
添加单个全局函数
|
|
添加多个全局函数
|
|
使用$.extend()进行扩展(适合全局函数比较多的情况)
|
|
独立的命名空间
|
|
选择器插件
虽然jQuery的选择器十分强大,但在少数情况下,还是会需要用到选择器插件来扩充一些自己喜欢的选择器。
编写jQuery选择器需要知道jQuery选择器的参数。
jQuery选择器函数一共接收3个参数,代码如下:
构建选择器函数
例如编写$(“div:between(2,5)”)能实现获取索引值为3,4元素的功能
构建:
扩展成jQuery选择器
插件的基本要点
- Query插件的文件名推荐命名为jquery.[插件名].js,以免和其他JS库插件混淆。
- 所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身。
在插件的范围里, this关键字代表了这个插件将要执行的jQuery对象;而在其他包含callback的jQuery函数中,this关键字代表了原生的DOM元素。
1234567891011(function($){$.fn.myPlugin =function(){//此处没有必要将this包在$号中如$(this),因为this已经是一个jQuery对象。//$(this)等同于 $($('#element'));this.fadeIn('normal',function(){//此处callback函数中this关键字代表一个DOM元素});};})(jQuery);$('#element').myPlugin();可以通过this.each方法来遍历所有元素。
- 在插件头部加上一个分号,以免他人的不规范代码给插件带来影响。
- 所有的方法或函数插件,都应当以分号结尾,以免压缩时出现问题
- 除非插件需要返回的是一些需要获取的变量,插件应该返回一个jQuery对象,以保证插件的可链式操作。
- 利于jQuery.extend()方法设置插件方法的默认参数,增加插件的可用性。
jQuery.fn.extend()与jQuery.extend()的对比
- jQuery.fn.extend()是对于jQuery对象(原型)扩展的方法,因为jQuery.fn=jQuery.prototype
- jQuery.extend()除了用于扩展jQuery全局函数和选择器函数之外,还有一个重要的功能,就是扩展已有的Objext对象
语法:jQuery.extend(target,obj1,…[objN])
1、例如合并setting对象和options对象,修改并返回settings对象
由此可见,内部机制是有扩展对象将覆盖与原对象相同的属性的值;若原对象不存在某属性,则进行扩展
2、jQuery.extend()常被用于设置插件方法的一系列默认参数,如下: