編寫jquery 插件

通常狀況咱們在編寫基於jquery插件時都會默認用到一下的格式! css

jQuery插件的機制 
JQuery提供了2個用於擴展JQuery功能的方法。即: 
①jQuery.fn.extend() 
②jQuery.extend() 
第一個就是咱們前面說插件類型的對象方法,第二個就是指jquery類對象方法。 
jQuery.extend()在插件中友一個很重要的功能是擴展已經有的object的對象。
html

jQuery提供了2個供用戶擴展的‘基類’ – $.extend和$.fn.extend. java

$.extend 用於擴展自身方法,如$.ajax, $.getJSON等,$.fn.extend則是用於擴展jQuery類,包括方法和對jQuery對象的操做。爲了保持jQuery的完整性,我比較 趨向於使用$.fn.extend進行插件開發而儘可能少使用$.extend. jquery

 儘可能使用Id選擇器,jQuery的選擇器使用的API都是基於getElementById或getElementsByTagName,所以能夠知道 效率最高的是Id選擇器,由於jQuery會直接調用getElementById去獲取dom,而經過樣式選擇器獲取jQuery對象時每每會使用 getElementsByTagName去獲取而後篩選。 ajax

jQuery插件代碼格式:
// 能夠去掉開頭的 ; (分號),國外的開發人員編寫的插件時的一種習慣 
;(function($){
     $.fn.pluginName = function() {     
           // Our plugin implementation code goes here.     
     };
})(jQuery);     數組

//傳入一個jQuery的參數(其是就是匿名函數的參數$的值爲jQuery),是由於該方法是對jQuery庫的擴展,那麼在該方法體內就能夠調用jQuery庫中的函數;若不傳入,則沒法調用jQuery庫  閉包


雖然在jQuery命名空間中,咱們禁止使用了大量的javaScript函數名和變量名。可是仍然不可避免某些函數或變量名將於其餘jQuery插件衝突,所以咱們習慣將一些方法封裝到另外一個自定義的命名空間。 dom

在編寫插件時,要注意:①jQuery.fn.extend() ②jQuery.extend() 這兩種方式。 jquery插件

通常狀況最好選用$.fn.插件名=function(){} 函數

要注意引用$.fn.extend,確保不會與jquery自帶裏面的對象方法重名。

$.fn.extend({

方法名:function(){}

});



;(function($){ 

$.fn.yourName = function(options){ 
//各類屬性、參數 

var options = $.extend(defaults, options); 
this.each(function(){ 
//插件實現代碼 
}); 
}; 

})(jQuery); 

這樣編寫的好處:

1. 使用閉包:

(function($) {
  // Code goes here
})(jQuery);

這是來自jQuery官方的插件開發規範要求,使用這種編寫方式有什麼好處呢?

a) 避免全局依賴。

b) 避免第三方破壞。

c) 兼容jQuery操做符'$'和'jQuery '


編寫插件實例:

jQuery.expr[":"]實際上就是一個選擇器!:

//插件編寫
;(function($) {
$.extend(jQuery.expr[
":"], {
between :
function( a , i ,m ) {
var tmp=m[3].split(","); //將傳遞進來的m[3]以逗號爲分隔符,切成一個數組
return tmp[0]-0<i&&i<tmp[1]-0;
}
});
})(jQuery);

//插件應用
$(function(){
alert(
"執行前");
$(
"div:between(2,5)").css("background","white");
alert(
"執行後");
})

參考資料:

1.http://www.poluoluo.com/jzxy/201204/163035.html

相關文章
相關標籤/搜索