在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jquery
以及熟悉jquery
使用的人來說,首先想到的肯定是尋找現有的jquery
外掛程式來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jquery
外掛程式可供選擇,網路上也有很多專門收集jquery
外掛程式的**。利用jquery
外掛程式確實可以給我們的開發工作帶來便捷,但是如果只是會簡單使用,而對其中的原理不甚了解,那麼在使用過程中碰到問題或者對外掛程式進行定製開發時就會有諸多疑惑。本文的目的就是可以快速了解jquery
外掛程式的開發原理以及掌握jquery
開發的基本技能。
進行jquery
外掛程式開發前,首先要知道兩個問題:什麼是jquery
外掛程式?jquery
外掛程式如何使用?
第乙個問題,jquery
外掛程式就是用來擴充套件jquery
原型物件的乙個方法,簡單來說就是jquery
外掛程式是jquery
物件的乙個方法。其實回答了第乙個問題,也就知道第二個問題的答案了,jquery
外掛程式的使用方式就是jquery
物件方法的呼叫。
我們先看個例子:$("a").css("color","red")
。我們知道每個jquery
物件都會包含jquery
中定義的dom
操作方法,這裡使用$
方法來選擇a
元素,返回乙個a
元素的jquery
物件,這個物件就可以使用jquery
中定義的dom
操作方法。那麼jquery
物件是如何獲取這些方法的呢?其實jquery
內部定義了乙個jquery.fn
物件,檢視jquery
原始碼可以發現jquery.fn=jquery.prototype
,也就是說jquery.fn
物件是jquery
的原型物件,jquery
的dom
操作方法都在jquery.fn
物件上定義的,然後jquery
物件就可以通過原型繼承這些方法。
基礎版jquery外掛程式
知道了上面這些知識,我們就可以來寫乙個簡單的jquery
外掛程式。假如我現在需要乙個jquery
外掛程式用來改變標籤內容顏色,就可以按下面的方式來實現這個外掛程式:
1 $.fn.changestyle = function然後按下面的方式來使用外掛程式:(colorstr)
$("p").changestyle("red");
外掛程式呼叫的時候,外掛程式內部的this
就是當前呼叫外掛程式的jquery
物件,這樣的話每個使用$()
方法選擇的標籤,在呼叫changestyle()
外掛程式時都會使用css()
方法重設color
樣式。
滿足鏈式呼叫的jquery外掛程式
鏈式呼叫時jquery
的一大特色,乙個通用的外掛程式應該遵循jquery
風格,滿足鏈式呼叫要求。實現鏈式呼叫的方式也很簡單:
1 $.fn.changestyle = function然後使用的時候就可以鏈式呼叫其他方法了:(colorstr)
$("p").changestyle("red").addclass("red-color");
實現鏈式呼叫的關鍵點就一行**return this
,外掛程式中加了這行**,那麼在外掛程式執行完之後,就會把當前的jquery
物件返回,然後就可以在外掛程式方法後面繼續呼叫其它jquery
方法。
防止$符號汙染的jquery外掛程式
有很多js
庫都會使用$
符號,雖然jquery
可以使用jquery.noconflict()
方法交出$符號的使用權,但是如果定義外掛程式的時候,使用$.fn
物件來定義的,那麼這些外掛程式使用的時候就會受到其它使用$
變數的js
庫的影響。對於這種情況,我們可以使用立即執行函式通過傳參的方式封裝外掛程式。形式如下:
1 (function因為使用了立即執行函式,所以此時的($)6 }(jquery));
$
只屬於這個立即執行函式的函式作用域,這樣就可以避免$
符號的汙染。
可以接受引數的jquery外掛程式
繼續上面的例子,假如我還想為這個外掛程式新增乙個設定標籤元素內容文字大小的功能,那麼我可以這麼來實現:
(function上面這種外掛程式傳參方式適用於引數比較少的情況,如果需要傳給外掛程式內部的引數比較多,我們可以定義乙個引數物件,然後把需要傳給外掛程式的引數放在引數物件中。外掛程式定義時如下:($)}(jquery));
1 (function使用方式:($)6
7 }(jquery));
$("p").changestyle();
把引數放到乙個物件中傳給外掛程式還有乙個好處就是我們可以在外掛程式內部為一些引數定義一些預設值,例如:
(function上面的**用到了($);
var setting =$.extend(defaultsetting,option);
this.css("color",setting.colorstr).css("fontsize",setting.fontsize+"px");
return
this
; }
}(jquery));
$.extend
方法,這個方法在這裡的用法就是合併兩個物件,即把後面乙個物件的存在的屬性值賦值給第乙個物件,具體用法可以參考這裡。$.extend
方法還有一種作用是用來擴充套件jquery
物件本身。
這樣定義的外掛程式,我們在使用時如果不傳fontsize
,那麼使用這個外掛程式的jquery
物件標籤的內容會被設定成預設的12px
。
使用方式:$("p").changestyle();
注意:在為外掛程式定義預設引數時,一定要把預設引數寫在外掛程式方法內部,這樣預設引數的作用域就在外掛程式內部。
總結定義外掛程式的方式除了上面說的用$.fn
來定義,還有另外一種方式來定義外掛程式,那就是使用$.fn.extend
方法。類似下面的寫法:
1 (functionps:($);
5var setting =$.extend(defaultsetting,option);
6this.css("color",setting.colorstr).css("fontsize",setting.fontsize+"px");
7return
this; 8
}9});10 }(jquery));
$.extend
方法和$.fn.extend
方法都可以用來擴充套件jquery
功能,通過閱讀jquery
原始碼我們可以發現這兩個方法的本質區別,那就是$.extend
方法是在jquery
全域性物件上擴充套件方法,$.fn.extend
方法是在$
選擇符選擇的jquery
物件上擴充套件方法。所以擴充套件jquery
的公共方法一般用$.extend
方法,定義外掛程式一般用$.fn.extend
方法。 掌握jQuery外掛程式開發
在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jquery以及熟悉jquery使用的人來說,首先想到的肯定是尋找現有的jquery外掛程式來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jquery外掛程式可供選擇,網路上也有很多專門收集jquery外掛程式的 ...
掌握jQuery外掛程式開發
在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jquery以及熟悉jquery使用的人來說,首先想到的肯定是尋找現有的jquery外掛程式來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jquery外掛程式可供選擇,網路上也有很多專門收集jquery外掛程式的 ...
掌握jQuery外掛程式開發
在實際開發工作中,總會碰到像滾動,分頁,日曆等展示效果的業務需求,對於接觸過jquery以及熟悉jquery使用的人來說,首先想到的肯定是尋找現有的jquery外掛程式來滿足相應的展示需求。目前頁面中常用的一些元件,都有多種jquery外掛程式可供選擇,網路上也有很多專門收集jquery外掛程式的 ...