开发jQuery插件的基本步骤
在进行开发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插件的基本步骤的更多相关文章
- 教你开发jQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文: ...
- 开发JQuery插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...
- 如何开发jQuery插件
一:普及JQuery知识 知识1:用JQuery写插件时,最核心的方法有如下两个: $.extend(object) 可以理解为,为JQuery 类添加一个静态方法. $.fn.extend(obje ...
- 自己动手开发jQuery插件
因为工作需要,所以这几天琢磨了一下关于jQuery插件开发的问题,经过一天鏖战,终于完成自己动手做的第一个jQuery插件,对于俺这种见了css就蛋疼菊紧的人来说,一天时间8小时,保守估计有5个小时在 ...
- 快速开发 jQuery 插件的 10 大技巧(转)
转自:http://www.oschina.net/news/41776/jquery-10-tips 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模 ...
- 快速开发 jQuery 插件的 10 大技巧
在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & paste 大部分的代码结构,只要专注最主要的逻辑代码就行了. ...
- 快速开发jQuery插件的10大技巧
原文链接:http://wiki.itivy.com/?p=36 在开发过很多 jQuery 插件以后,我慢慢的摸索出了一套开发jQuery插件比较标准的结构和模式.这样我就可以 copy & ...
- 快速开发 jQuery 插件的 10 大技巧(转)
1. 把你的代码全部放在闭包里面 这是我用的最多的一条.但是有时候在闭包外面的方法会不能调用.不过你的插件的代码只为你自己的插件服务,所以不存在这个问题,你可以把所有的代码都放在闭包里面.而方法可能应 ...
- 【转】教你开发jQuery插件
阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原文:http://www.cnblo ...
随机推荐
- Netty 心跳服务之 IdleStateHandler 源码分析
前言:Netty 提供的心跳介绍 Netty 作为一个网络框架,提供了诸多功能,比如我们之前说的编解码,Netty 准备很多现成的编解码器,同时,Netty 还为我们准备了网络中,非常重要的一个服务- ...
- JS DOM 操作 项目总结 【超链接】【数列】【span】
超链接 每次定义链接样式时务必确认定义的顺序,link--visited--hover-active,也就是我们常说到的LoVe HAte原则(大写字母就是它们的首字母). “爱恨原则”(Lo ...
- Java基础——Servlet(四)
最近一直在学习Servlet,真的有烦躁,一下子要创建好几个文件,服务端.客户端.html页面....学习进度蛮慢的,很容易失掉信心.当学习到cookie时,发现有好多实现是在我们日常生活中可以会遇得 ...
- java中递归实现复制多级文件夹
常见的流的用法 递归实现复制多级文件夹 FileInputStream & FileOutputStream String content = null;//用来储存解码后的byte数组 in ...
- 数据操作语句(DML)
增加(插入)数据 SQL>insert into 表名 values(值1,值2 /*根据表中的字段顺序和字段类型相应填写*/); SQL>commit; (提交,提交了别的人才看看到这个 ...
- windows 格式化D盘
格式化D盘1.右击我的电脑2.高级系统设置3.高级4.性能->设置5.高级->虚拟内存(更改)6.双击D设置->无分页文件7.确定->重启计算机
- ThinkPHP5自定义分页样式
1.在thinkphp/library/think/paginator/driver目录下新建文件Page.php 注意命名空间和继承 <?php namespace think\paginat ...
- css3之transform属性实现div不定宽高垂直水平居中
transform的作用 transform 属性向元素应用 2D 或 3D 转换.该属性允许我们对元素进行旋转.缩放.移动或倾斜.(w3cschool) transform的兼容性 transfor ...
- TensorFlow数据读取方式:Dataset API
英文详细版参考:https://www.cnblogs.com/jins-note/p/10243716.html Dataset API是TensorFlow 1.3版本中引入的一个新的模块,主要服 ...
- Oracle 用户、角色管理简介
Oracle 用户.角色管理简介 by:授客 QQ:1033553122 创建用户 形式1:创建名为testacc2的用户 CREATE USER testacc2 IDENTIFIED BY abc ...