工作之余,对Jquery插件做了一点尝试,想着之前总用别人写的插件,自己要是也写一个用岂不是很cool。于是说干就干,动手开始写。

首先是模仿,从一个简单的功能进行入手,了解一下插件开发的流程和结构。

第一个尝试是做一个表格的隔行变色插件,相对简单。

首先是基本的框架结构:

自己的插件要定义在自己的命名空间中,不污染全局的命名空间,因此最外层应该是这样的结构:

(function ($) {

})(jQuery);

由于这种类型的插件是建立在对已有元素的功能扩展,因此大体格式如下:

function ($) {
$.fn.fnName = function (options) { }
})(jQuery);

为自己的插件命名一个方法,同时给这个方法传递一个options的参数。

有了这个结构,就可以完成调用了,类似这样的方式:$("#domName"). fnName ({})

接下来就是设置插件的参数默认值和自定义值了。

由于插件需要提供一定的灵活性给用户,因此设置参数是必须的,但在用户做demo或者简单方便来说,要提供一个默认值也是必须的。因此,需要在插件内部声明默认值:

(function ($) {
$.fn.dannyTableUI = function (options) {
//定义默认值
var defaults = {
evenRowClass: 'evenc',
oddRowClass: 'oddc',
hoverRowClass: 'hoverc'
};
}
})(jQuery);

有了默认值,那么如果用户传递过来了自定义的参数值,如何处理呢?首先想到的是把用户自定义的参数值对默认值进行覆盖。如何覆盖呢?

Jquery提供了一个方法:

var options = $.extend(defaults, options);

这个方法可以把后面的参数覆盖到前面的参数中去,返回覆盖(合并)后的结果,非常方便。

有了这个方法,我们就能处理好自定义参数和默认值的关系了。

接下来,我们就要开始核心功能的编写了,要注意写法上如果要支持Jquery选择器和链式调用,需要这样:

//支持JQuery选择器
//支持链式调用
return this.each(function () { });

这样,整体的结构就完毕了。

最后把我们需要做的功能加进去,就可以了。

//隔行变色
this.each(function () {
var table = $(this);
table.find("tr:even").addClass(options.evenRowClass);
table.find("tr:odd").addClass(options.oddRowClass); table.find("tr").bind("mouseover", function () {
$(this).addClass(options.hoverRowClass);
});
table.find("tr").bind("mouseout", function () {
$(this).removeClass(options.hoverRowClass);
});
});

基本步骤就是:

  1. 定义命名空间。
  2. 定义插件扩展方法
  3. 定义默认值
  4. 处理默认参数和自定义参数的关系
  5. 链式调用和选择器框架
  6. 定义功能实现
  7. 添加注释,文档,示例

参考:http://www.cnblogs.com/xcj26/p/3345556.html

JQuery插件开发初探——结构熟悉的更多相关文章

  1. JQuery插件开发初探——图片轮播

    在熟悉了插件开发的结构以后,自己尝试着做了一个稍微复杂一点的小功能:图片轮播插件. 由于之前使用的一款图片轮播插件,性能不高,页面加载的时候需要载入全部的图片,因此速度很慢. 通过自己做这个小插件,能 ...

  2. jQuery插件开发初探

    最简单的插件 $.fn.changeStyle = function (colorStr) { $(this).css('color',colorStr); } 应用如下: <!DOCTYPE ...

  3. jQuery插件开发的模式和结构

    jQuery插件开发 一般来说,jQuery插件的开发分为两种:一种是挂在jQuery命名空间下的全局函数,也可称为静态方法:另一种是jQuery对象级别的方法,即挂在jQuery原型下的方法,这样通 ...

  4. jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  5. jquery插件开发继承了jQuery高级编程思路

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  6. Jquery插件开发学习

    一:导言 有些WEB开发者,会引用一个JQuery类库,然后在网页上写一写$("#"),$("."),写了几年就对别人说非常熟悉JQuery.我曾经也是这样的人 ...

  7. Jquery插件开发精品教程

    最开始接触jquery对他提供的各种插件总是十分有兴趣,但是总是不理解为什么这样写,从网络上查询了很久终于找到这篇文章,讲解的很详细,分享给大家. 要说jQuery 最成功的地方,我认为是它的可扩展性 ...

  8. 转:jQuery插件开发精品教程,让你的jQuery提升一个台阶

    要说jQuery 最成功的地方,我认为是它的可扩展性吸引了众多开发者为其开发插件,从而建立起了一个生态系统.这好比大公司们争相做平台一样,得平台者得天下.苹果,微软,谷歌等巨头,都有各自的平台及生态圈 ...

  9. jquery学习笔记---jquery插件开发

    http://www.cnblogs.com/Wayou/p/jquery_plugin_tutorial.html jquery插件开发:http://www.cnblogs.com/damonla ...

随机推荐

  1. Django操作model时刻,一个错误:AttributeError:’ProgrammingError’ object has no attribute ‘__traceback__’

    原因:在Django项目下对应的应用以下的models.py配置的model(也就是class)没有创建成对应的表. 这是怎么回事呢? 首先,将models.py里面的model创建成相应的数据库表的 ...

  2. Razor button

    比起Web Form開發,在後端(.cs)寫法上大同小異,可選擇C#或VB.NET來撰寫:而在前端(.cshtml..vbhtml)則有比較大的差別,自 MVC3版本後,就以Razor為前端檢視引擎, ...

  3. 【原创】编写多线程Python爬虫来过滤八戒网上的发布任务

    目标: 以特定语言技术为关键字,爬取八戒网中网站设计开发栏目下发布的任务相关信息 需求: 用户通过设置自己感兴趣的关键字或正则表达式,来过滤信息. 我自己选择的是通过特定语言技术作为关键字,php.j ...

  4. SQL 编码标准

    1. 你必须从别名表,易于使用的表,该表列 实例 select owner,object_id,name from a,b where a.id=b.id; 假设是不正确的别名表.我知道你是怎么访问表 ...

  5. appendChild的用法

    appendChild的用法 1,先把元素从原有父级上删除 2,再把元素添加到新父级上

  6. 《数据结构、算法及应用》9.(C++实施订单)

    最近阅读<数据结构.算法及应用>这本书,书中的习题汇总,用自己的方法来实现这些问题.可能效率.等方面存在着非常多的问题,也可能是错误的实现.假设大家在看这本书的时候有更优更好的方法来实现, ...

  7. Lua面向对象设计(转)

    首先对于Lua语言,它没有打算被用来进行大型的程序设计,相反,Lua目标定于小型到中型的程序设计,通常是作为大型系统的一部分,所以它只提供了一套精简的元素,很多高级语言的概念都没有.这样Lua就成为了 ...

  8. ATL 创COM物

    我原来以前写dll创建过程,而直接使用LoadLibrary加载动态库. 但ATL提出了一个非常重要的特点是引入COM对象的概念. 首先. ATL active template library该活动 ...

  9. IDEA内存异常问题

    设置工程运行Server  VM属性 VM options:   -Xms258m -Xmx1024m -XX:PermSize=128m -XX:MaxPermSize=256m    如图 :

  10. HDU2516-取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...