制作jQuery插件(转)

发布于:
分类: Script

首先我们先写一个jquery的匿名函数

  1. <SCRIPT LANGUAGE="JavaScript">  
  2. $(function(){  
  3.       var alterColor = function(table){  
  4.        $('tbody tr:odd',table).removeClass('even').addClass('odd');  
  5.        $('tbody tr:even',table).removeClass('odd').addClass('even');  
  6.       }  
  7.    alterColor('#cnjquery);  
  8. })  
  9. </SCRIPT>  

这是一个最基本的写法 ,还没有做成 插件形式,主要就是让表格隔行换色。

这里我们可以发现 这个函数几乎没有什么通用性,下面我们来对她进行扩展。

  1. <SCRIPT LANGUAGE="JavaScript">  
  2. $(function(){  
  3.  
  4.    $.fn.alterColor = function(){  
  5.      $('tbody tr:odd'this).removeClass('even').addClass('odd');  
  6.      $('tbody tr:even'this).removeClass('odd').addClass('even');  
  7.    }  
  8.  
  9.       $('#cnjquery').alterColor();  
  10.  
  11. })  
  12. </SCRIPT>  

 

$(‘#cnjquery’).alterColor();

这样样子有点插件的意思了,但是我们会发现一个问题 这样写,不能链式操作,

也就是   $(‘#cnjquery’).alterColor().find("????")等

为什么呢?因为jquery在执行每个方法的时候 都会返回一个jquery对象 也就是我们只要加一个返回值就可以了
 

  1. <SCRIPT LANGUAGE="JavaScript">  
  2. $(function(){  
  3.  
  4.    $.fn.alterColor = function(){  
  5.      $('tbody tr:odd'this).removeClass('even').addClass('odd');  
  6.        $('tbody tr:even'this).removeClass('odd').addClass('even');  
  7.        return this//新增代码    }  
  8.  
  9.    $('#cnjquery).alterColor().find("tr").click(function(){  
  10.         alert(1);//可以 链式操作 了。  
  11.    });  
  12.  
  13. })  
  14. </SCRIPT>  

现在我们看到可以链式操作了 到了这里我们的插件算是基本完成了,但是还有一个小小问题

也就是插件的参数都是死的 ,我们没有办法动态修改他的参数,这样应用起来就太不方便了,没有办法还需要继续改造

  1. $(function(){  
  2.     $.fn.alertColor = function(options) {  
  3.        var defaults = {  
  4.         odd : "red",  
  5.          even : "blue" 
  6.    };  
  7. var o = $.extend(defaults, options);  
  8.    return this.each(function() {  
  9.    $('tbody tr:odd'this).removeClass(o.even).addClass(o.odd);  
  10.          $('tbody tr:even'this).removeClass(o.odd).addClass(o.even);  
  11.    return this;  
  12. })   
  13.    }  
  14.  
  15.     $('#cnjquery').alertColor({ odd : "cs"});  
  16. // 或者 $('#cnjquery').alertColor({ odd : "red" , even : "blue"});  
  17. // 或者 $('#cnjquery').alertColor();  
  18.  
  19. }) 

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注