1、所谓的jQuery插件事实上就是jQuery的扩展方法,分为两种:类方法与实例方法;对于有过面向对象编程的人来讲是不是非常熟悉?!
2、类方法扩展很简单,即扩展类似$.post()这种方法,直接使用$调用,那么扩展方法可以直接写成$.xxx = function(){}即可;类方法全局调用;
3、实例方法,即必须是$(‘someone’).xxxx()形式的调用,这种方法如何扩展呢?因为还不知道扩展给哪个实例,所以在扩展方法是拿不到该实例。其实jQuery有个属性叫fn,所有的实例方法都挂在该属性下面,官方给出了扩展实例方法的标准模板,可能一眼看过来有点蒙,下面我通过几个版本的演变来解释该“标准模板”是如何得来的:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | // 1.0、最简单版本 $.fn.xxx = function(){ // 实现代码... } // 1.1、兼顾参数与选择器集合 $.fn.xxx = function(options){ this.each(function(){ // 实现代码... }); } // 1.2、增加初始参数或默认值 $.fn.xxx = function(options){ let defaults = { } options = $.extend(defaults, options); this.each(function(){ }); } // 1.3、更加严谨写法,使用匿名函数包裹并执行 (function(){ $.fn.xxx = function(options){ let defaults = { } options = $.extend(defaults, options); this.each(function(){ }); } })(); // 1.4、完善优化jQuery对象本身的影响 (function($){ $.fn.xxx = function(options){ let defaults = { } options = $.extend(defaults, options); this.each(function(){ }); } })(jQuery); |
假如现在要实现一个功能,表格的奇数背景色为#eee,偶数行背景色为#ccc,当前行(悬停时)背景色为#999,封装该样式方法
演示效果地址:http://www.yusian.com/jquery/plugin/jquery.html