在进行开发jQuery插件前,首先要了解一些知识:

1、闭包

1.1、闭包的作用:

· 避免全局依赖

· 避免第三方破坏

· 兼容jQuery操作符'$'和jQuery

1.2、闭包的形式

	(function(arg){...})(param)

相当于定义了一个参数为arg的匿名函数(function(arg){...}),并且将param作为参数来调用这个匿名函数。

在调用函数function(arg){...}时,是在函数后面写上括号和实参(param)的,而由于操作符的优先级,函数本身也需要用括号(function(arg){...})

(function($){...})(jQuery)是一样的,之所以只在形参使用$,是为了不与其他库冲突,所以实参用jQuery。

另外,(function($){...})(jQuery)用来定义一些需要预先定义好的函数,用来存放开发插件的代码,执行其中的代码时DOM不一定存在。而$(function(){...})则是用来在DOM加载完成之后运行/执行那些预先定义好的函数,用来存放操作DOM对象的代码,执行其中代码时DOM对象已存在。

2、jQuery插件的开发方式

2.1、类级别组件开发

即给jQuery命名空间下添加新的全局函数,也称为静态方法。

	jQuery.myPlugin = function(){
// do something
}

例:$.Ajax()、$.extend()

2.2、对象级别组件开发

挂在jQuery原型下的方法,这样通过选择器获取的jQuery对象实例也能共享该方法,也称为动态方法。

	$.fn.myPlugin = function(){		//这里$.fn === $.prototype
// do something
}

例:addClass(),attr()等,都需要创建实例来调用

3、链式调用

使用例子:$('div').next().addClass(...)...

与上面介绍对象级别组件开发$.fn.myPlugin = function(){...}组合的实现:

	$.fn.myPlugin = function(){
return this.each(function(){
// do something
})
}

其中,return this返回当前对象,来维护插件的链式调用;而each循环实现每个元素的访问。

4、单例模式

使用单例模式是为了只生成一个实例,可以避免过多的实例不好管理,比如一个人售票还好,再多一个人售票就会产生进程之间的一系列问题。

1	$.fn.myPlugin = function(){
2 var me = this,
3 instance = me.data('myPlugin');
4
5 //如果实例存在则不再重新创建实例
6 //利用data()方法来存放插件对象的实例
7 if(!instance){
8 me.data('myPlugin',(instance = new myPlugin()));
9 }
10 }

其中,data()方法向被选元素附加数据(第8行),或者从被选元素获取数据(第3行)。

5、开发jQuery插件

基本结构为:

(function($){

	//定义插件myPlugin
var myPlugin = (function(){
//定义每个实例对象各自特有的属性和方法
function myPlugin(element,options){...} //定义所有实例对象共有的属性和方法
myPlugin.prototype={...} return myPlugin;
})(); //使myPlugin能被通过选择器获取的jQuery对象实例使用,并实现链式调用
$.fn.myPlugin=function(options){
return this.each(function(){
var me = this,
instance = me.data('myPlugin'); if(!instance){
me.data('myPlugin',(instance = new myPlugin()));
} })
}; //一般情况下,允许别人在使用我们开发的插件时修改一些默认的属性变量以达到不同的实现效果
//例如:我们开发一个全屏切换的插件,默认情况下为竖直变换,但允许用户使用是改为水平切换
$.fn.myPlugin.defaults={
direction:'vertical', //默认情况下为竖直变换
...
...
}; //使DOM元素调用插件方法实现效果
$(function(){
$('DOM元素').myPlugin();
}); })(jQuery);

一个全屏切换插件的例子。

以上为个人见解,望指教。

开发jQuery插件的基本步骤的更多相关文章

  1. 教你开发jQuery插件(转)

    教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...

  2. 开发JQuery插件(转)

    教你开发jQuery插件(转)   阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...

  3. 如何开发jQuery插件

    一:普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: $.extend(object) 可以理解为,为JQuery 类添加一个静态方法. $.fn.extend(obje ...

  4. 自己动手开发jQuery插件

    因为工作需要,所以这几天琢磨了一下关于jQuery插件开发的问题,经过一天鏖战,终于完成自己动手做的第一个jQuery插件,对于俺这种见了css就蛋疼菊紧的人来说,一天时间8小时,保守估计有5个小时在 ...

  5. 快速开发 jQuery 插件的 10 大技巧(转)

    转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...

  6. 快速开发 jQuery 插件的 10 大技巧

    在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...

  7. 快速开发jQuery插件的10大技巧

    原文链接:http://wiki.itivy.com/?p=36 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & ...

  8. 快速开发 jQuery 插件的 10 大技巧(转)

    1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...

  9. 【转】教你开发jQuery插件

    阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblo ...

随机推荐

  1. Docker实战-为镜像添加SSH服务

    1.基于docker commit命令创建 Docker提供了docker commit命令,支持用户提交自己对定制容器的修改,并生成新的镜像. 命令格式为:docker commit CONTAIN ...

  2. Tomcat服务器的安装配置图文教程(推荐)

    现在将使用Tomcat的一些经验和心得写到这里,作为记录和备忘.如果有朋友看到,也请不吝赐教. 1.首先是Tomcat的获取和安装. 获取当然得上Apache的官方网站下载,开源免费,而且带宽也足够. ...

  3. 详解contextConfigLocation|Spring启动过程详解

    spring的应用初始化流程一直没有搞明白,刚刚又碰到了相关的问题.决定得好好看看这个流程.我们在开发spring的项目当中基本上都会在web.xml通过: <context-param> ...

  4. 虚拟机中安装完 CentOS7minimal 版本后无法联网的问题

    问题描述 安装完系统后无法上网,然后进入到目录 /etc/sysconfig/network-script 查看.发现只有一个 ifcfg-lo. 解决办法 这种情况是没有识别到网卡. 在 VMwar ...

  5. Mybatis的枚举处理器

    Mybatis有两个默认枚举处理器 EnumOrdinalTypeHandler EnumTypeHandler 自定义枚举 EnumOrdinalTypeHandler 这个处理器负责将pojo里面 ...

  6. php面向对象高级-魔术方法与迭代器

    1,魔术方法__set与__get, __call >这些魔术方法,将在相关的属性或者方法不存在时调用 >函数原型 .function __set( $property, $value ) ...

  7. DRF序列化

    1. 安装 pip install djangoframework 2. app注册 rest_framework INSTALLED_APPS = [ 'django.contrib.admin', ...

  8. python-责任链模式

    源码地址:https://github.com/weilanhanf/PythonDesignPatterns 说明: 当你作为一名coder已经快三十却还还没有女朋友,家中父母已经着急万分,此时要求 ...

  9. java中return、break、continue的区别

    1.return @Testpublic void testReturn(){ for (int j = 1; j < 3; j++) { for (int i = 1; i < 5; i ...

  10. js知识学习图谱,新手必看

    前端新手学习也不外乎就是Html  css  html5  css3  这是最基本的,学会这些仅仅可以说是会写布局,写网页,不算前端开发,还有最重要的js,jq要学习,我自己java后台转前端,现在复 ...