jquery编写插件
版权声明:作者原创,转载请注明出处!
编写插件的两种方式:
1.类级别开发插件(1%)
2.对象级别开发(99%)
类级别的静态开发就是给jquery添加静态方法,三种方式
1.添加新的全局函数
2.使用$.extend(obj)
3.使用命名空间
类级别开发插件(用的非常少,1%)
分别举例:

//1.直接给jquer添加全局函数
jQuery.myAlert=function (str) {
alert(str);
}; //2.用extend()方法。extend是jquery提供的一个方法,把多个对象合并起来,参数是object
jQuery.extend({
myAlert2:function (str1) {
alert(str1);
},
myAlert3:function () {
alert(11111);
}
}); //一定要注意两种类级别编写插件方式书写的区别。 //3.使用命名空间(如果不使用命名空间容易和其他引入的JS库里面的同名方法冲突)
jQuery.yuqing={
myAlert4:function (str) {
alert(str);
},
centerWindow:function (obj) {
obj.css({
'top':($(window).height()-obj.height())/2,
'left':($(window).width()-obj.width())/2
});
//必须进行返回对象的操作,否则就不能继续往下进行链式操作了。。
return obj;
}
};

调用部分:

//调用自定义插件方法
$('#btn').click(function () {
$.myAlert('我是调用jquery编写的插件弹出的警告框');
$.myAlert2('我是调用jquery的extend()方法编写的插件弹出的警告框');
$.myAlert3();
$.yuqing.myAlert4("调用使用了命名空间编写的插件方法");
});
$.yuqing.centerWindow($('#div1')).css('background','red');

注意:jquery文件要一并引入。
对象级别开发插件(常用99%)
jquery官方给了一套对象级别开发插件的模板:

;(function ($) {
$.fn.plugin=function (options) {
var defaults={
//各种参数、各种属性
};
//options合并到defaults上,defaults继承了options上的各种属性和方法,将所有的赋值给endOptions
var endOptions=$.extend(defaults,options);
this.each(function () {
//实现功能的代码
});
};
})(jQuery);

模板要点:
1.函数全部放在闭包里,外面的函数就调用不到里面的参数了,比较安全
2.前面加分号,避免不必要的麻烦
举个栗子:
需求:开发一个插件,要求奇数行颜色是yellow,偶数行颜色是green,鼠标移到的行变为blue,移除变为原来的颜色
HTML布局:
css样式
jquery调用代码:
$('#tab').table({
evenRowClass:'evenRow1',
oddRowClass:'oddRow1',
curRowClass:'curRow1',
eventType1:'click'
});
jquery插件代码:

1 ;(function ($) {
2 $.fn.table=function (options) {
3 var defaults={
4 //各种参数、各种属性
5 evenRowClass:'evenRow',
6 oddRowClass:'oddRow',
7 curRowClass:'curRow',
8 eventType1:'mouseover',
9 eventType2:'mouseout'
10 };
11
12 var endOptions=$.extend(defaults,options);
13
14 this.each(function () {
15 var _this = $( this );
16 _this.find('tr:even').addClass(endOptions.evenRowClass);
17 _this.find('tr:odd').addClass(endOptions.oddRowClass);
18 //鼠标移入和移出,但实际开发中不直接使用mouseover这种方法
19 /*$(this).find('tr').mouseover(function () {
20 $(this).addClass(endOptions.curRowClass);
21 }).mouseout(function () {
22 $(this).removeClass(endOptions.curRowClass);
23 });*/
24
25 //实际开发中要用bian()方法绑定
26 //因为用bind()方法绑定非常灵活,事件可以自己定义
27 //mouseover mouseout...事件底层都是用bind()去实现的,mouseout 等只是快捷方式
28 _this.find('tr').bind(endOptions.eventType1,function () {
29 $(this).addClass(endOptions.curRowClass);
30 });
31 _this.find('tr').bind(endOptions.eventType2,function () {
32 $(this).removeClass(endOptions.curRowClass);
33 })
34 });
35 };
36 })(jQuery);

插件注释:
15行:var _this = this; 变量存储,因为很多地方用到$(this);所以将其存储为变量使用更加的方便,也提高了运行效率。
19-23行与28-33行实现的功能是相同的,但是推荐使用28-33行的写法,使用bian()进行事件的绑定,因为使用会非常的灵活。
可变的地方,如样式名称等最好写在defaults里,方便用户自行配置。
再来一个对象级别实现jquery插件的栗子(⊙o⊙)哦!!实现选项卡功能~~
HTML布局

<div id="tab">
<ul id="nav">
<li class="active">HTML</li>
<li>CSS</li>
<li>JAVASCRIPT</li>
</ul>
<div id="cont">
<div style="display: block;">HTML</div>
<div>CSS</div>
<div>JAVASCRIPT</div>
</div>
</div>

css样式:

* {
margin: 0;
padding: 0;
}
#nav li {
list-style: none;
float: left;
height: 25px;
line-height: 25px;
border: 1px solid #0000FF;
border-bottom: none;
padding: 5px;
margin: 10px;
margin-bottom: 0;
}
#cont div {
width: 210px;
height: 150px;
border: 1px solid #0000FF;
margin-left: 10px;
clear: both;
display: none;
}
.active {
background: #AFEEEE;
}

调用的JS代码
<script type="text/javascript">
$('#tab').tab({
tabType: 'mouseover'
});
</script>
注意哦:不要忘记先引入jquery.js文件喔,然后在引入我们编写的插件tab.js,才能正确调用到tab()方法。。。
插件tab.js

;(function($) {
$.fn.tab = function(options) {
var defaults = {
tabActiveClass: 'active',
tabNav: '#nav>li',
tabCont: '#cont>div',
tabType: 'click'
};
var endOptions = $.extend(defaults, options);
$(this).each(function() {
var _this = $(this);
_this.find(endOptions.tabNav).bind(endOptions.tabType, function() {
$(this).addClass(endOptions.tabActiveClass).siblings().removeClass(endOptions.tabActiveClass);
var index = $(this).index();
_this.find(endOptions.tabCont).eq(index).show().siblings().hide();
});
});
};
})(jQuery);

这个小栗子和上一个表格插件的栗子相似度是很高的,多敲几遍,理解意思,其实jquery扩展插件并不难哦~~
如有不对的地方,还请各路大神赐教!
jquery编写插件的更多相关文章
- javascript&&jquery编写插件模板
javascrpt插件编写模板 这里不分享如何编写插件,只留一个框架模板,使用面向对象的形式进行编写,方便管理 ;(function(window,document){ function FnName ...
- jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2 ...
- 再谈:jquery编写插件的方法
版权声明:作者原创,转载请注明出处! 编写插件的两种方式: 1.类级别开发插件(1%) 2.对象级别开发(99%) 类级别的静态开发就是给jquery添加静态方法,三种方式 1.添加新的全局函数 2. ...
- 【原】jQuery编写插件
分享一下编写设置和获取颜色的插件,首先我将插件的名字命名为jquery.color.js.该插件用来实现以下两个功能1.设置元素的颜色.2.获取元素的颜色. 先在搭建好如下编写插件的框架: ;(fun ...
- 两个jquery编写插件实例
(1) 封装基于jq弹窗插件 相信码友们对于$.fn.extexd();$.extend()以及$.fn.custom和$.custom都有一定的了解:我阐述一下我自己对于$.fn.custom和 ...
- jquery编写插件(转)
教你开发jQuery插件(转) 阅读目录 基本方法 支持链式调用 让插件接收参数 面向对象的插件开发 关于命名空间 关于变量定义及命名 压缩的好处 工具 GitHub Service Hook 原 ...
- jQuery编写插件--封装全局函数的插件(一些常用的js验证表达式)
上一篇写到了jQuery插件的3种类型,介绍了第一种类型的写法--封装jQuery对象的方法插件.这一篇要介绍第二种插件类型:封装全局函数的插件:这类插件就是在jQuery命名空间内部添加函数:这类插 ...
- jquery 编写插件入门
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <sc ...
- 用jquery编写的分页插件
用jquery编写的分页插件 源码 function _pager_go(total_page) { var page_str = $("#_pager_textbox").val ...
随机推荐
- 未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?) 转
未能找到类型或命名空间名称“XXXX”(是否缺少 using 指令或程序集引用?) 项目中 App_Code 文件夹中的类的命名空间,在添加的页面的 using XXXX 时,提示 未能找到类 ...
- Delphi HTTP error message: Can't execute C:\Program Files\Borland\Delphi7\Bin\serverinfo.exe 1813
delphi 调用Webservice ,停止服务的时候总是爱提示: Internal Server ErrorHTTP status code: 500 HTTP error message: C ...
- 动态规划初级练习(一):ZigZag
Problem Statement A sequence of numbers is called a zig-zag sequence if the differences between ...
- 2014-08-22 关于Response、Request等对象在cs文件中的使用
今天是在吾索实习的第33天.已经有一段时间没写过博客了,今天突然想起个值得分享的东西,所以又华丽地回归了. 废话不多说了,直奔主题.我们会发现,在我们在cs文件中,直接使用Response.Reque ...
- 《算法问题实战策略》-chaper32-网络流
基本的网络流模型: 在图论这一块初步的应用领域中,两个最常见的关注点,其一时图中的路径长度,也就是我们常说的的最短路径问题,另一个则是所谓的“流问题”. 流问题的基本概念: 首先给出一张图. 其实所谓 ...
- 《SDN核心技术剖析和实战指南》2.3 OF-CONFIG配置管理协议小结
OpenFlow协议定义了交换机和控制器交换数据的方式和规范,但并没有定义如何配置和管理必需的网络参数和网络资源,OF-CONFIG的提出就是为了对OpenFlow提供配置管理支持.如下图所示,OF- ...
- label标签的属性
//label标签的属性 - (void)viewDidLoad { //初始化一个label1标签对象,初始化有很多方法,最原始的就是init,此处用带有frame的方法 UILabel *labe ...
- Linux----硬连接和软连接
一,概念 在Linux的文件系统中,保存在磁盘分区中的文件不管是什么类型都给它分配一个编号称为索引节点号(Inode Index). 硬链接 多个文件名指向同一个索引节点(一个文件有多个副本) 允许一 ...
- springmvc实现REST中的GET、POST、PUT和DELETE
spring mvc 支持REST风格的请求方法,GET.POST.PUT和DELETE四种请求方法分别代表了数据库CRUD中的select.insert.update.delete,下面演示一个简单 ...
- 在终端(Terminal)里用命令行进行数学运算
有时候我们进行一些数学运算,我们会去开系统自带的计算来做这件事情,其实我们也可以直接在终端里面用命令行进行的. 在命令行里敲 bc 进入数学计算模式,然后随便输入数学表达式 回车 ,结果就出来了,是不 ...
