在进行开发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. 24.ArrayBuffer

    ArrayBuffer ArrayBuffer ArrayBuffer对象.TypedArray视图和DataView视图是 JavaScript 操作二进制数据的一个接口.这些对象早就存在,属于独立 ...

  2. Bower前端模块管理器

    cnpm install bower -g 安装bower bower install jquery //bower会自动去网上找到最新版本的jquery bower uninstall jquery ...

  3. win2d 图片水印

    本文告诉大家如何使用 win2d 给图片加上水印. 安装 首先需要使用 Nuget 安装 win2d ,安装参见win10 uwp win2d 如果没有更新 dot net core 那么在运行可能会 ...

  4. .NET世界的包管理器——Nuget

    NugetServer 使用指南 为什么要使用Nuget 在我们的项目, 存在着一些公共Dll, 这些Dll被大量的项目所引用.同时这些公共dll也同时在进行版本升级, 由于缺乏版本管理,这些Dll会 ...

  5. HTML 常用标记

    一 常用标签   &nbsp:                    -- 表示空格 也可以在设计页面中按    ctrl+shift+space <br> 或<br /&g ...

  6. 链接正常但IE浏览器无法显示网页的几种情况

    一.感染病毒木马所致 这种情况往往表现在打开IE时,在IE界面的左下框里提示:正在打开网页,但一直无响应. 右击任务栏/任务管理器/进程,查看.如果CPU占用率100%,可以断定是感染了病毒,这时要查 ...

  7. [android] 新闻客户端引入SlidingMenu

    下载SlidingMenu,https://github.com/jfeinstein10/SlidingMenu 导入library 我们项目右键==>Properties==>Andr ...

  8. 主键(primary key)和唯一索引(unique index)区别

    主键一定是唯一性索引,唯一性索引并不一定就是主键.  所谓主键就是能够唯一标识表中某一行的属性或属性组,一个表只能有一个主键,但可以有多个候选索引.因为主键可以唯一标识某一行记录,所以可以确保执行数据 ...

  9. You can Solve a Geometry Problem too (hdu1086)几何,判断两线段相交

    You can Solve a Geometry Problem too Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/3276 ...

  10. Android-消息处理学习总结(Handler,Looper)

    参考资料: http://www.cnblogs.com/qlky/p/5657924.html http://blog.csdn.net/guolin_blog/article/details/99 ...