通常狀況咱們在編寫基於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){})(jQuery);
這樣編寫的好處:
1. 使用閉包:
這是來自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("執行後");
})
參考資料: