前言
jQuery已经被广泛使用,凭借其简洁的API,对DOM强大的操控性,易扩展性越来越受到web开发人员的喜爱,本文简单介绍一下如何开发jQuery的插件
开发插件的方式有两种
类级别的开发
类级别的插件开发最直接的理解就是给jQuery类添加类方法,可以理解为添加静态方法。典型的例子有$.AJAX(),$.getJSON()
,将函数定义于jQuery的命名空间中.
- 直接给jQuery添加一个函数.
1 | jQuery.pluginTest = function() { |
- 通过
jQuery.extend()
添加函数
1 | jQuery.extend({ |
-
以命名空间的方式添加函数
优点: 避免某些函数或变量名将于其他jQuery插件冲突
1 | jQuery.pluginTest = { |
对象级别的开发
- 第一种对象级别开发方式:
1 | jQuery.fn.extend({pluginTest : function() { |
- 第二种对象级别开发方式:
1 | jQuery.fn.pluginTest = function() { |
- 保证私有函数的私有性(闭包):
优点 : 定义更多的函数而不搅乱命名空间也不暴露实现
1 | (function($) { |
- 通过接收参数options 改变默认的值
1 | (function($) { |
- 通过暴露属性改变默认值
1 | (function () { |
开发插件时需要注意的几点
-
推荐使用插件的命名方法
jQuery.[插件名].js||[插件名].js
-
所有的对象方法都应当附加到
JQuery.fn
对象上面,而所有的全局函数都应当附加到JQuery对象本身上 -
在插件内部,
this
指向的是当前通过选择器获取的JQuery对象,而不像一般方法那样,内部的this
指向的是DOM
元素 -
可以通过
this.each
来遍历所有的元素 -
所有方法或函数插件,都应当以分号结尾,否则压缩的时候可能会出现问题.为了更加保险写,可以在插件头部添加一个分号(;),以免他们的不规范代码给插件带来 影响.
-
插件应该返回一个jQuery对象,以便保证插件的可链式操作. 链式操作:
($("#div1").css("color","red").addClass("Add"))
jQuery.extend()
和 jQuery.fn.extend()
区别
jQuery.extend()
函数
var tar = jQuery.extend(target, src1, src2...);
作用:将target,src1,src2中的属性合并添加到target中并返回
var tar = jQuery.extend({},target,src1,src2...);
作用:将target,src1…中的属性合并,target结构不变
var tar = jQuery.extend(boolean, target, src1, src2);
Boolean 表示是否进行深度拷贝(是否复制嵌套对象)
jQuery.extend(src);
作用:将该src合并到调用extend方法的对象中去,这里就是将src合并到jquery的全局对象中去
JQuery.fn.extend()
函数
使用方法同上
jQuery.fn
是什么
jQuery 源码如下:
1 | jQuery.fn = jQuery.prototype = { |
从源码中可以看出jQuery.fn.extend(src)
就是将src
添加到jQuery原型中由其实例对象调用