跟我一起学写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 相关文章推荐
IE6背景图片不缓存问题解决方案及图片使用策略多个方法小结
May 14 Javascript
js修改table中Td的值(定义td的单击事件)
Jan 10 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
Apr 11 Javascript
AngularJS快速入门
Apr 02 Javascript
JavaScript实现鼠标点击后层展开效果的方法
May 13 Javascript
JavaScript中用sort()方法对数组元素进行排序的操作
Jun 09 Javascript
jquery中表单 多选框的一种巧妙写法
Sep 06 Javascript
详解React-Router中Url参数改变页面不刷新的解决办法
May 08 Javascript
JavaScript轮播停留效果的实现思路
May 24 Javascript
深入理解Node内建模块和对象
Mar 12 Javascript
vue 输入电话号码自动按3-4-4分割功能的实现代码
Apr 30 Javascript
Antd表格滚动 宽度自适应 不换行的实例
Oct 27 Javascript
基于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
php抓取https的内容的代码
2010/04/06 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
smarty学习笔记之常见代码段用法总结
2016/03/19 PHP
php 猴子摘桃的算法
2017/06/20 PHP
jQuery使用手册之一
2007/03/24 Javascript
JS+CSS实现的拖动分页效果实例
2015/05/11 Javascript
javascript删除元素节点removeChild()用法实例
2015/05/26 Javascript
jQuery CSS3相结合实现时钟插件
2016/01/08 Javascript
jQuery 全选 全部选 反选 实现代码
2016/08/17 Javascript
js前端面试题及答案整理(一)
2016/08/26 Javascript
AngularJS入门教程之数据绑定用法示例
2016/11/01 Javascript
Node.js发送HTTP客户端请求并显示响应结果的方法示例
2017/04/12 Javascript
nodejs和C语言插入mysql数据库乱码问题的解决方法
2017/04/14 NodeJs
开源一个微信小程序仪表盘组件过程解析
2019/07/30 Javascript
layui多iframe页面控制定时器运行的方法
2019/09/05 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
[01:03:38]2014 DOTA2国际邀请赛中国区预选赛5.21 CNB VS CIS
2014/05/22 DOTA
python 解析html之BeautifulSoup
2009/07/07 Python
Python缩进和冒号详解
2016/06/01 Python
python循环定时中断执行某一段程序的实例
2019/06/29 Python
python中struct模块之字节型数据的处理方法
2019/08/27 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
2019/09/07 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python打印文件的前几行或最后几行教程
2020/02/13 Python
详解基于Scrapy的IP代理池搭建
2020/09/29 Python
cookies应对python反爬虫知识点详解
2020/11/25 Python
玩具反斗城西班牙网上商城:ToysRUs西班牙
2017/01/19 全球购物
教师优秀党员事迹材料
2014/08/14 职场文书
委托书如何写
2014/08/30 职场文书
2014银行领导班子群众路线对照检查材料思想汇报
2014/09/17 职场文书
代领报检证委托书范本
2014/10/11 职场文书
普通党员群众路线教育实践活动心得体会
2014/11/04 职场文书
团代会邀请函
2015/02/02 职场文书
2015年度优秀员工获奖感言
2015/07/31 职场文书
先进基层党组织事迹材料2016
2016/02/29 职场文书
如何理解PHP核心特性命名空间
2021/05/28 PHP