跟我一起學寫jQuery插件

作者: 阿一(楊正祎)  來源: 博客園  發布時間: 2010-03-31 14:13  閱讀: 1970 次  推薦: 0   原文鏈接   [收藏]  

  jQuery如此流行,各式各樣的jQuery插件也是滿天飛。你有沒有想過把自己的一些常用的JS功能也寫成jQuery插件呢?如果你的答案是肯定的,那么來吧!和我一起學寫jQuery插件吧!

嗨,美女,這是我寫的一個jQuery插件!

  很多公司的前端設計開發人員都是女孩子,而這些女孩子很多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);

  有了這個,咱就可以往里面套東西了。

名號、參數和屬性

  好不容易開始闖蕩江湖了,一定要有一個響亮的名號才行,這樣走在江湖上,才能夠屌,夠威風。不信,你聽聽人家“中國牙防組”!所以,咱這里一定要起個響亮的名號,一定要簡單、明了、夠權威。所以,決定了,就叫做“tableUI”了!

  參數和屬性也很簡單,無非就是三個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);

  看上去很屌的一句,其實就是合并多個對象為一個。這里就是,如果你在調用的時候寫了新的參數,就用你新的參數,如果沒有寫,就用默認的參數。想進一步了解的朋友,可以參考jquery的官方文檔: 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);

ok!來看看一個完整的實例吧!

  沒圖沒真相,沒代碼沒真相。所以貼圖和完整實例是必須的。

近期推薦閱讀文章

前后端配合
3 月20日博客園張江聚會演講資料

IxEdit
拋磚:如何進行互聯網項目開發

0
0
 
標簽:jQuery
 
 

文章列表

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()