jQuery
插件有不少,有UI
類,表單驗證,輸入類,特效類,Ajax
類,滑動類,導航類,工具類,動畫類等等。css
jQuery
的插件主要分爲三類:jquery
一、封裝對象方法的插件:也就是基於某個DOM元素的jQuery對象,局部性 二、封裝全局函數的插件:將獨立的函數添加到jquery的命名空間之下。jquery.trim()就是jquery內部做爲全局函數的插件添加到內核上去的。 三、選擇器插件:擴充本身喜歡的一些選擇器。相似於.toggle()
1. 插件的文件名推薦爲 jquery.[插件名].js,例如jquery.validate.js 2. 全部的對象方法都應當附加到jQuery.fn對象上,而全部的全局函數都應當附加到jQuery對象自己上 3. 在插件內部,this指向的是當前經過選擇器獲取的jQuery對象,而不像通常的方法那樣,例如click()方法,內部的this指向的是DOM元素 4. 能夠經過this.each來遍歷全部元素 5. 全部的方法或函數插件,都應當以分號結尾,不然壓縮時可能出問題,有的爲了更加穩妥些,在插件的開始處加上一個分號 6. 插件應該返回一個jQuery對象,這樣能夠保證插件的可鏈式操做。除非插件須要返回的是一些須要獲取的量,例如字符串或者數組等 7. 儘可能利用閉包技巧從來避免變量名的衝突 8. 引入的自定義插件必須在jQuery庫後面
jQuery
插件開發方式主要有三種:segmentfault
經過$.extend()來擴展jQuery 經過$.fn 向jQuery添加新的方法 經過$.widget()應用jQuery UI的部件工廠方式建立
一般咱們使用第二種方法來進行簡單插件開發,而第一種方法是在jQuery
命名空間上添加了一個靜態方法,並不能讓咱們選中DOM元素,而後再調用該方法。而第三種並不經常使用,也較爲複雜數組
在開始編寫jQuery
插件時,咱們有必要了解一下插件的基本結構,全部的jQuery
插件都聲明爲jQuery.fn
對象的方法:閉包
jQuery.fn.showPlugin = function () { //code here };
咱們使用以下代碼使用插件:app
$("#plugin").showPlugin();
這裏,我並無使用$
,這是爲了不命名衝突,若是要用 $
的話,能夠像下面這樣把插件代碼封裝在一個自執行的匿名函數中,而後傳入參數jQuery
框架
(function($){ jQuery.fn.showPlugin = function () { //code here }; })(jQUery);
.extend()
容許你使用一個或多個對象擴展基準對象,擴展的方式是依序將右邊的對象合併到基準對象(左邊第一個對象)。函數
;(function($){ $.extend({ 'nav' : function () { } }) })(jQuery);
咱們經過以下方法使用該全局方法:工具
$.nav();
前面(見:淺析jQuery總體框架與實現(上))咱們說過,$.extend
是全局性的,而$.fn.extend
是局部性的,前面之因此要加分號是由於爲了防止在此以前引入的js
文件沒有加分號字體
$.fn.myPlugin = function() { //在這裏面,this指的是用jQuery選中的元素 //example :$('a'),則this=$('a') this.css('color', 'red'); }
this
指代jQuery
選擇器返回的集合。在插件裏的this
,通過了一些封裝處理,this
就是表示jQuery
對象。而不須要再次使用$()
進行包裝了
要讓插件實現鏈式調用只須要return
該對象便可:
$.fn.myPlugin = function() { this.css('color', 'red'); return this.each(function() { //對每一個元素進行操做 $(this).append(' ' + $(this).attr('href')); })) }
使用return
this.each(function () {}
這樣就實現了咱們的鏈式操做。
$.fn.myPlugin = function(options) { //常常用options表示有多個參數。 var defaults = { 'color': 'red', 'fontSize': '12px' }; var settings = $.extend(defaults, options); return this.css({ 'color': settings.color, 'fontSize': settings.fontSize }); }
調用時,字體大小會運用插件裏的默認值:
$('a').myPlugin({ 'color': '#2C9929' });