跟我一起学写jQuery插件开发方法(附完整实例及下载)


Posted in Javascript onApril 01, 2010

很多公司的前端设计开发人员都是女孩子,而这些女孩子很多JavaScript技能都不是很好。而前端开发过程中,JavaScript技能又是必不可少的。所以,如果前端小MM正在为某个JavaScript效果发愁的时候,你潇洒的过去,然后对她说:“嗨,美女,用这个吧。这是我写的一个jQuery插件。”我想基本上你的人生大事就能很快解决。
先想好做个什么功能
这是第一步,也是很重要的一步,鉴于咱们都是刚学习写jQuery插件,所以,这个功能一定要简单一些。不要想一口就吃个胖子,咱也吃不了。咱还是捡个瘦的下手吧。但是,这个功能也不能太无聊,如果无聊到几乎没用处,就算做好了也是扔到马桶里,不会持续更新,也便不会持续进步了。
我最终选择的是:美化表格,让表格的奇偶行颜色不同,然后鼠标移到某行上,某行可以高亮显示。功能简单又实用,不错,不错。呵呵~~
不急着写,先想想实现原理
还不急,先想想实现原理。必要的时候,先写出简单的实现的原型。
我的这个美化表格的例子,实现原理倒是简单,无非就是找到表格的奇偶行,然后添加不同的class,活动行高亮显示也很简单,只要判断mouseover事件,然后添加一个class,mouseout的时候,再去掉这个class即可。
一个通用的框架
在动手写自己的jQuery插件之前,自然是先研究一下别人写的插件了。其实写jQuery也基本有一个通用的框架。行,那咱也把这框架照搬过来吧。

(function($){ 
$.fn.yourName = function(options){ 
//各种属性、参数 
} 
var options = $.extend(defaults, options); 
this.each(function(){ 
//插件实现代码 
}); 
}; 
})(jQuery);

有了这个,咱就可以往里面套东西了。
名号、参数和属性
好不容易开始闯荡江湖了,一定要有一个响亮的名号才行,这样走在江湖上,才能够?牛?煌?纭2恍牛?闾??思摇爸泄?婪雷椤保∷?裕?壅饫镆欢ㄒ?鸶鱿炝恋拿?牛?欢ㄒ?虻ァ⒚髁恕⒐蝗ㄍ?K?裕?龆?耍?徒凶觥?ableUI”了!
参数和属性也很简单,无非就是三个class的名称。就叫做:evenRowClass、oddRowClass和activeRowClass吧。
所以,上面的框架,咱就把上半身给填上了。
(function($){ 
$.fn.tableUI = function(options){ 
var defaults = { 
evenRowClass:"evenRow", 
oddRowClass:"oddRow", 
activeRowClass:"activeRow" 
} 
var options = $.extend(defaults, options); 
this.each(function(){ 
//实现代码 
}); 
}; 
})(jQuery);

这里重点说一下这一句:
var options = $.extend(defaults, options);

看上去很?诺囊痪洌?涫稻褪呛喜⒍喔龆韵笪?桓觥U饫锞褪牵?绻?阍诘饔玫氖焙蛐戳诵碌牟问??陀媚阈碌牟问??绻?挥行矗?陀媚?系牟问?O虢?徊搅私獾呐笥眩?梢圆慰?query的官方文档: http://api.jquery.com/jQuery.extend/

开始下半身吧
ok,上半身填补完了,咱就可以填补下半身吧。无非就是找到基数行和偶数行(感谢jQuery提供了类似tr:even这种写法,使其及其简单),然后添加上相应的class。然后再给所有的tr,绑定mouseover和mouseout事件即可。下半身代码如下:

(function($){ 
$.fn.tableUI = function(options){ 
var defaults = { 
evenRowClass:"evenRow", 
oddRowClass:"oddRow", 
activeRowClass:"activeRow" 
} 
var options = $.extend(defaults, options); 
this.each(function(){ 
var thisTable=$(this); 
//添加奇偶行颜色 
$(thisTable).find("tr:even").addClass(options.evenRowClass); 
$(thisTable).find("tr:odd").addClass(options.oddRowClass); 
//添加活动行颜色 
$(thisTable).find("tr").bind("mouseover",function(){ 
$(this).addClass(options.activeRowClass); 
}); 
$(thisTable).find("tr").bind("mouseout",function(){ 
$(this).removeClass(options.activeRowClass); 
}); 
}); 
}; 
})(jQuery);

最重要的一步!
也许有些朋友觉得这样就算是完成了。但是切切相反,我们还有最重要的一步没有完成,那就是一定要在插件上方,写上插件的名称、版本号、完成日期、作者,作者的联系方式、出生日期、三围……等等。因为只有这样才能显的这个插件够专业。
/* 
* tableUI 0.1 
* Copyright (c) 2009 JustinYoung http://justinyoung.cnblogs.com/ 
* Date: 2010-03-30 
* 使用tableUI可以方便地将表格提示使用体验。先提供的功能有奇偶行颜色交替,鼠标移上高亮显示 
*/ 
(function($){ 
$.fn.tableUI = function(options){ 
var defaults = { 
evenRowClass:"evenRow", 
oddRowClass:"oddRow", 
activeRowClass:"activeRow" 
} 
var options = $.extend(defaults, options); 
this.each(function(){ 
var thisTable=$(this); 
//添加奇偶行颜色 
$(thisTable).find("tr:even").addClass(options.evenRowClass); 
$(thisTable).find("tr:odd").addClass(options.oddRowClass); 
//添加活动行颜色 
$(thisTable).find("tr").bind("mouseover",function(){ 
$(this).addClass(options.activeRowClass); 
}); 
$(thisTable).find("tr").bind("mouseout",function(){ 
$(this).removeClass(options.activeRowClass); 
}); 
}); 
}; 
})(jQuery);

演示地址

实例下载地址

Javascript 相关文章推荐
超级退弹代码
Jul 07 Javascript
jquery last-child 列表最后一项的样式
Jan 22 Javascript
打印json对象的内容及JSON.stringify函数应用
Mar 29 Javascript
js清理Word格式示例代码
Feb 13 Javascript
js获取元素相对窗口位置的实现代码
Sep 28 Javascript
AngularJS手动表单验证
Feb 01 Javascript
JavaScript数据绑定实现一个简单的 MVVM 库
Apr 08 Javascript
微信小程序 设置启动页面的两种方法
Mar 09 Javascript
学习使用Bootstrap栅格系统
May 11 Javascript
JavaScript时间戳与时间日期间相互转换
Dec 11 Javascript
js实现飞机大战小游戏
Aug 26 Javascript
Vue仿百度搜索功能
Dec 28 Vue.js
基于jquery的获取mouse坐标插件的实现代码
Apr 01 #Javascript
Jquery+JSon 无刷新分页实现代码
Apr 01 #Javascript
基于jQuery的消息提示插件之旅 DivAlert(三)
Apr 01 #Javascript
基于jQuery的消息提示插件 DivAlert之旅(二)
Apr 01 #Javascript
基于jQuery的弹出消息插件 DivAlert之旅(一)
Apr 01 #Javascript
基于jquery的tab切换 js原理
Apr 01 #Javascript
JQuery 选项卡效果(JS与HTML的分离)
Apr 01 #Javascript
You might like
使用php4加速网络传输
2006/10/09 PHP
PHP生成图片验证码功能示例
2017/01/12 PHP
CI(CodeIgniter)框架实现图片上传的方法
2017/03/24 PHP
PHP实现的权重算法示例【可用于游戏根据权限来随机物品】
2019/02/15 PHP
Thinkphp5.0框架使用模型Model的获取器、修改器、软删除数据操作示例
2019/10/11 PHP
PHP 对象接口简单实现方法示例
2020/04/13 PHP
extjs 04_grid 单击事件新发现
2012/11/27 Javascript
利用JavaScript实现新闻滚动效果(实例代码)
2013/11/27 Javascript
JavaScript中的call方法和apply方法使用对比
2015/08/12 Javascript
jQuery+json实现的简易Ajax调用实例
2015/12/14 Javascript
jQuery操作Table技巧大汇总
2016/01/23 Javascript
简单讲解jQuery中的子元素过滤选择器
2016/04/18 Javascript
剖析Angular Component的源码示例
2018/03/23 Javascript
基于vue-cli 路由 实现类似tab切换效果(vue 2.0)
2019/05/08 Javascript
jquery插件懒加载的示例
2020/10/24 jQuery
Python两个整数相除得到浮点数值的方法
2015/03/18 Python
python自带的http模块详解
2016/11/06 Python
python实现读Excel写入.txt的方法
2018/04/29 Python
Python闭包执行时值的传递方式实例分析
2018/06/04 Python
python实现dijkstra最短路由算法
2019/01/17 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
Python去除字符串前后空格的几种方法
2019/03/04 Python
Django重置migrations文件的方法步骤
2019/05/01 Python
Python3 实现串口两进程同时读写
2019/06/12 Python
对Python获取屏幕截图的4种方法详解
2019/08/27 Python
什么是Python中的顺序表
2020/06/02 Python
python 解决Windows平台上路径有空格的问题
2020/11/10 Python
Python Http请求json解析库用法解析
2020/11/28 Python
python中四舍五入的正确打开方式
2021/01/18 Python
工作证明范本(2篇)
2014/09/14 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
党员批评与自我批评思想汇报
2014/10/08 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
教师党员个人整改措施
2014/10/27 职场文书
上诉状格式
2015/05/23 职场文书
Python Pandas pandas.read_sql_query函数实例用法分析
2021/06/21 Python