1. 程式人生 > >jquery 外掛開發/外掛編寫$.fn.extend(),$.extend()

jquery 外掛開發/外掛編寫$.fn.extend(),$.extend()

jquery外掛開發大概有三種方式:
1,$.extend()-在jquery名稱空間即jquery本身上新增靜態方法;呼叫,例如:$.myPlugin();而非$('ele').myPlugin();
2,$.fn.extend()-

3,$.widget()-

$.extend({
    createNum:function(name){
        return 'hello '+(name?name:'andy');
    }
});

console.log($.createNum());//hello andy
console.log($.createNum('jack'));// hello jack


html:

    <div id="ex-div">
        <p><b>劉德華</b></p>
        <p><b>張學友</b></p>
        <p><b>黎明</b></p>
        <p><b>郭富城</b></p>
    </div>

以上程式碼通過$.extend()方法想jquery新增的,直接通過$呼叫;
但是,發現這種擴充套件方式無法通過DOM選擇器來觸發,這個時候我們就需要考慮$.fn
.extend()的擴充套件方式了; 如下,基本格式:
$.fn.sayHello= function(){
    // to do
};
/*
現在我們將頁面中的字改變顏色
* */
$.fn.changeColor = function(){
    this.css('color','red');// this 即選中的元素;當前指$('p')
};
// 呼叫如下:
$('#ex-div p').changeColor();
當然,其實在外掛程式碼裡我們經常處理某個具體的元素,而不是一個元素的集合
上面的程式碼,this指的是jquery選擇器返回的集合,我們可以通過jquery中的$.each()方法處理集合中的每個元素了;
但是,在each方法內部,this指代的就是普通的DOM元素了,如果需要呼叫jquery的方法那就需要用$來重新包裝一下;
現在我們來處理,在每個p標籤裡面加上一個i標籤,內容為-香港
$.fn.changeConts = function(){
    //這裡對this是用jquery選中的元素\
    var _html = '<i>-香港</i>'
    this.css('color','red');
    this.each(function(){
        //對每個元素進行操作
        $(this).append(_html);
    });
};
$('#ex-div p').changeConts();
我們又豐富了外掛,接下來我們繼續接受引數的延伸

為了讓外掛支援鏈式呼叫,我們需要return一下;
$.fn.changeConts = function(){
    //這裡對this是用jquery選中的元素\
    var _html = '<i>-香港</i>'
    this.css('color','red');
    return this.each(function(){
        //對每個元素進行操作
        $(this).append(_html);
    });
};
$('#ex-div').css('border','1px solid red').find('p').changeConts();

接下來,我們就處理引數的部分;
比如現在我們處理字型的顏色,由使用者來定義顏色,如果使用者沒有定義,我們就取預設值
說明一點:
在處理外掛引數的接收上,通常使用jquery的extend方法,上面也提及過,但那是給extend方法傳遞單個物件的情況下,
這個物件會合併到jquery身上,所以我們就可以在jquery身上呼叫新合併物件裡包含的方法了,如上面的例子;
當給extend方法傳遞一個以上的引數時,它會將所有到引數物件合併到第一個裡.
同時,如果物件中有同名的屬性,合併後後面的引數會覆蓋前面的;

利用這一點,我們可以在外掛裡定義一個儲存外掛引數預設值的物件,同時將接收來的引數物件合併到預設物件上,
最後便實現了使用者指定引數使用的值,未指定的引數使用預設值;

我們定義下font-size,允許外掛呼叫的時候設定字型;
$.fn.extend({
    changeConts: function (options) {
        var defaults = {
            'color':'red',
            'fontSize':'12px'
        };
        var setting = $.extend(defaults,options);
        return this.css({
            'color':setting.color,
            'fontSize':setting.fontSize
        });
    }
});
//未指定字型大小的時候,預設值為12px
$('#ex-div p').changeConts({
    'color':'blue'
});
//我們來指定字型大小
$('#ex-div p').changeConts({
    'color':'red',
    'fontSize':'20px'
});

雖然實現了引數的傳遞,但是我們沒有保護包引數
我們可以看到呼叫extend時,會將defaults的值改變,這樣不是我們期望的,我們希望它維持原樣,方便其它呼叫;

一個好的做法是,將一個新的空物件作為$.extend的第一個引數,defaults和使用者傳遞的引數緊跟其後,
這樣做的好處就是所有值都合併到這個空物件上,保護了外掛裡面到預設值;
$.fn.extend({
    changeConts:function(options){
        var defaults = {
            'color':'red',
            'fontSize':'12px'
        };
        var setting = $.extend({},defaults,options);
        return this.css({
            'color':setting.color,
            'fontSize':setting.fontSize
        });
    }
});
$('#ex-div p').changeConts({
    'color':'blue',
    'fontSize':'20px'
});
至此,外掛可以接受引數和處理引數後,就可以愉快的編寫外掛了;
若要編寫一個龐大的優雅的外掛,我們需要將外掛包裝到一個物件上,用面向物件的思維進行開發;
如果將需要的重要變數定義到物件的屬性上,函式變成物件的方法,當我們需要的時候通過物件獲取,
一來方便管理,二來不會影響外部名稱空間,因為這些所有的變數名和方法名都是在物件內部;
接下來,我們來優化程式碼
// 定義Slipactive的建構函式;
function Slipactive(ele,opt){
    this.$element = ele;
    this.dafaults = {
        'color':'red',
        'fontSize':'12px',
        'textDecoration':'none'
    };
    this.options = $.extend({},this.dafaults,opt)
}
Slipactive.prototype = {
    constructor:Slipactive,
    slipactive:function(){
        this.$element.css({
            'color':this.options.color,
            'fontSize':this.options.fontSize,
            'textDecoration':this.options.textDecoration
        });
        return this;
    }
};
// 在外掛中使用Slipactive物件
$.fn.extend({
    mySlipa:function(options){
        // 建立Slipactive
        var slipactive = new Slipactive(this,options);
        // 呼叫方法
        return slipactive.slipactive();
    }
});
$('#ex-div p').mySlipa({
    'color':'blue',
    'fontSize':'30px'
});

以上便是面向物件,也更好維護和理解,以後要新增新方法,只需向物件新增新變數和方法就行,
然後便可以在外掛例項化後即可呼叫新新增的東西
$('#ex-div p').mySlipa({
    'color':'blue',
    'fontSize':'30px',
    'textDecoration':'underline'
});
至此,外掛開發已經完畢;
接下來,我們來做些錦上添花的東西;例如優化名稱空間,變數等
其實,我們在寫js的時候就應該不要汙染全域性變數;我們可以採用閉包包裹程式碼
(function(){
    function Slipactive(ele,opt){
        this.$element = ele;
        this.dafaults = {
            'color':'red',
            'fontSize':'12px',
            'textDecoration':'none'
        };
        this.options = $.extend({},this.dafaults,opt)
    }
    Slipactive.prototype = {
        constructor:Slipactive,
        slipactive:function(){
            this.$element.css({
                'color':this.options.color,
                'fontSize':this.options.fontSize,
                'textDecoration':this.options.textDecoration
            });
            return this;
        }
    };
// 在外掛中使用Slipactive物件
    $.fn.extend({
        mySlipa:function(options){
            // 建立Slipactive
            var slipactive = new Slipactive(this,options);
            // 呼叫方法
            return slipactive.slipactive();
        }
    });
})();

自呼叫匿名函式裡面的程式碼會在第一時間執行;
然後,將系統變數以引數形式傳遞到外掛內部也是個不錯的實踐;
這樣,window等系統變數在外掛內部就有了一個區域性的引用,可以提高訪問效率;
結構如下:
;(function($,window,document,undefiend){
    // to do

})(jQuery,window,document);

最後解釋下undefiend
為了得到沒有被修改的undefiend,我們並沒有傳遞這個引數,但是卻在接收的時候接收了它,
因為實際上並沒有傳,所以'undefiend'那個位置接收到的就是真正的undefiend了;

至此,完畢!








相關推薦

jquery 外掛開發外掛編寫$.fn.extend(),$.extend()

jquery外掛開發大概有三種方式: 1,$.extend()-在jquery名稱空間即jquery本身上新增靜態方法;呼叫,例如:$.myPlugin();而非$('ele').myPlugin(); 2,$.fn.extend()- 3,$.widget()-$.ext

eclipse外掛開發(匯出外掛,安裝外掛)

僅工作中使用到,現查現用,理解不到位,請持懷疑態度檢視本文。如有問題請聯絡郵件:[email protected]; 以便交流。 匯出外掛 參考文章:http://www.th7.cn/Program/java/201308/147987.shtml   文章講

android外掛開發——載入外掛

在閱讀本博文的時候,我假設你已經閱讀了我之前寫的幾篇。猛擊此處 通過前面的幾篇部落格,我們解決了如何啟動一個並沒有在ActivityManifest.xml中宣告的activity。但是有很多細心的讀者私信我說,我們所有的例子裡,外掛都是和主工程在一起的呀,我

jQuery外掛開發jQuery.extend(object)和jQuery.fn.extend()

jQuery外掛開發分為2種 1、類級別 類級別你可以理解為拓展jquery類,最明顯的例子是$.ajax(...),相當於靜態方法。 開發擴充套件其方法時使用$.extend方法,即jQuery.extend(object);  程式碼如下: $.extend({ add:func

jQuery外掛開發全解析,jQuery.extend , (function($){ , $.fn.pluginName,jqueryAPI參考文件

http://www.w3school.com.cn/jquery/event_focus.asp     jqueryAPI參考文件 序:匿名函式,匿名函式沒有實際名字,也沒有指標,怎麼執行滴?  其實大家可以看看小括號的意義就應該可以理解。小括號有返回值,也就是

jquery外掛開發;(function ( $, window, document, undefined ){}(jQuery, window,document)分析

經常看到許多jquery外掛是這種形式: 1 2 3 ;(function( $, window, document, undefined ){}){ //...code }(jquery,window,docu

JQuery外掛開發入門

個人比較喜歡封裝,現在學習JQuery,總想封裝出自己喜歡的外掛,所以將JQuery外掛的開發稍加總結。 本文並不全面,主要針對自定義外掛的分類和語法進行總結,希望以後可以作為工具檢視。 注: jQuery外掛的完整開發文件可參考 類級別的外掛: 1、新增一個函式 1 jQuery.f

jQuery 外掛開發方法學習

文件介紹: 通過全面瞭解jquery外掛來學習如何自己動手編寫jquery外掛 http://www.aijquery.cn/Html/jqueryrumen/126.html jquery編寫外掛的方法 https://www.cnblogs.com/yuqingfamily/p/5813

jQuery外掛開發精品教程,讓你的jQuery提升一個臺階

要說jQuery 最成功的地方,我認為是它的可擴充套件性吸引了眾多開發者為其開發外掛,從而建立起了一個生態系統。這好比大公司們爭相做平臺一樣,得平臺者得天下。蘋果,微軟,谷歌等巨頭,都有各自的平臺及生態圈。 學會使用jQuery並不難,因為它簡單易學,並且相信你接觸jQuery後肯定也使用或熟悉了不少其外掛

JavaScript學習總結(四)——jQuery外掛開發與釋出

jQuery外掛就是以jQuery庫為基礎衍生出來的庫,jQuery外掛的好處是封裝功能,提高了程式碼的複用性,加快了開發速度,現在網路上開源的jQuery外掛非常多,隨著版本的不停迭代越來越穩定好用,在jQuery官網有許多外掛: 一、外掛開發基礎 1.1、$.exten

jQuery自定義導航外掛開發過程

前言 在開發過程中,我們經常會使用到外掛,其具有方便靈活的特點,但是如果在市面上找不到自己滿意的外掛,或者想自己封裝一個外掛提供給別人使用時,就需要自己編寫一個jQuery外掛了。 按照功能來分類,外掛可以分為以下三類: 1.封裝物件方法的外掛(就是基於D

jQuery外掛開發基礎入門

在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jQuery以及熟悉jQuery使用的人來說,首先想到的肯定是尋找現有的jQuery外掛來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jQuery外掛可供選擇,網路上也有很多專門收集jQuery外掛的網站。利用jQuery外

jQuery外掛開發-----tab選項卡

經過實踐,發現我不是一個能夠堅持的人,所以一有計劃馬上執行,為了每天保持學習,敲程式碼,所以不斷看視訊教程,看書,當年成為學渣就是因為不能重複看一本書。為了分擔家裡負擔,好書重複翻看,好的視訊教程重複看,忍忍也就過去了,我需要提升! 關於外掛,之前文章講過,this指向要

jQuery外掛開發學習

1、jQuery外掛編寫準備 要使用jQuery進行自定義外掛的編寫,首先應該的是瞭解jQuery的外掛機制或者說是通過jQuery庫本身提供的哪些函式進行外掛的編寫,主要涉及的兩個函式是:jQuery.extend(object)和jQuery.fn.extend(o

4、jQuery面向物件之簡單的外掛開發

(function($){ /** * 這裡需要一些方法 * 查詢方法 * 修改的方法 * 刪除的方法 */ $.fn.GridPanel = { /** * 初始化事件

jquery外掛開發學習筆記(五)——動態選擇觸發器

(function ($) { //var trigger_chosen; // if($("#test002").attr("checked")){ // trigger_chosen=$("#test002").val(); //

JQuery如何自定義外掛——$.fn的使用

              JQuery提供了很多多的外掛,粗略一搜,發現還不能用很多來形容:                          點了幾個看了看,發現都相當精美,web開

jQuery外掛開發

Lightweight Start 模式 1.什麼是Lightweight模式 這種模式適合於外掛開發新手或者是隻是想實現簡單的功能,Lightweight start使用了以下內容: 常見最佳實踐 window、document和undefined

最簡單的jquery外掛開發示例

頁面三個DIV,一個按鈕。 點選按鈕後,三個DIV的高度調整為相同。 <!DOCTYPE html> <html> <head> <style> div { width: 40px;

phonegap3.4外掛開發入門例子

根據官方文件(3.4.0)的外掛開發指南: http://docs.phonegap.com/en/3.4.0/guide_hybrid_plugins_index.md.html#Plugin%20Development%20Guide http://docs.phonegap.com/e