麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > JavaScript > 正文

jQuery插件開發(fā)匯總

2019-11-20 10:03:18
字體:
供稿:網(wǎng)友

一、jQuery插件開發(fā)兩個底層方法
jQuery.extend([deep ], target [, object1 ] [, objectN ] )
將兩個或更多對象的內(nèi)容合并到第一個對象。

1、deep 如果是true,合并成為遞歸(又叫做深拷貝)
2、target 一個對象,如果附加的對象被傳遞給這個方法將那么它將接收新的屬性,如果它是唯一的參數(shù)則將擴展jQuery的命名空間,這對于插件開發(fā)者希望向 jQuery 中添加新函數(shù)時是很有用的。
3、object1 一個對象,它包含額外的屬性合并到第一個參數(shù)
4、包含額外的屬性合并到第一個參數(shù)
當我們提供兩個或多個對象給/(.extend(),對象的所有屬性都添加到目標對象(target參數(shù)) 目標對象(第一個參數(shù))將被修改,并且將通過/).extend()返回。然而,如果我們想保留原對象,我們可以通過傳遞一個空對象作為目標對象:
var settings = $.extend({}, defaults, options);
在默認情況下,通過$.extend()合并操作是不遞歸的;

var object1 = {apple: 0,banana: {weight: 52, price: 100},cherry: 97};var object2 = {banana: {price: 200},durian: 100};$.extend(object1, object2);//{apple: 0, banana: {price:200}, cherry: 97, durian: 100}$.extend(true, object1, object2);//{apple: 0, banana: {weight: 52, price:200}, cherry: 97, durian: 100}jQuery.fn.extend()

在jQuery源碼中有jQuery.fn = jQuery.prototype = function(){……}即指向jQuery對象的原型鏈,對其它進行的擴展,作用在jQuery對象上面;

總結(jié)

1、jQuery.extend()能夠創(chuàng)建全局函數(shù)或選擇器,在實際開發(fā)中常使用jQuery.extend()方法作為插件方法傳遞系列選項結(jié)構(gòu)的參數(shù)
2、jQuery.fn.extend()能夠創(chuàng)建jQuery對象方法,一般用此方法來擴展jQuery的對象插件
二、jQuery插件開發(fā)通用框架

;(function($, window, document, undefined){ //Plugin code here})(jQuery, window, document);

使用分號是為了防止因前面的代碼沒有使用分號而導(dǎo)致插件函數(shù)不能正確解析
傳入jQuery是為了確保在匿名函數(shù)中正確的使用jQuery對象,防止多庫共存時$沖突
傳入window、document并非必須,只不過為了更快的訪問window和document
傳入undefined是為了防止undefined變量被更改,確保undefined的準確性

三、jQuery插件開發(fā)的3種形式
1、類級別開發(fā)(封裝全局函數(shù)的插件)
類級別寫法:

//方式1;(function($, window, document, undefined){ $.pluginName = function(){  //Plugin implementation code here }; })(jQuery, window, document);//方式2 當全局函數(shù)較多時;(function($, window, document, undefined){ $.extend({  pluginName = function(){   //Plugin code here  };  })})(jQuery, window, document);

調(diào)用方法:$.pluginName();

2、對象級別的插件開發(fā)
對象級別插件寫法:

//方式1;(function($, window, document, undefined){ $.fn.pluginName = function(options) {  return this.each(function() {   //this關(guān)鍵字代表了這個插件將要執(zhí)行的jQuery對象  //return this.each()使得插件能夠形成鏈式調(diào)用   var defaults = {    //pro : value   };   var settings = $.extend({}, defaults, options);   // plugin implementationcode here  }); }})(jQuery, window, document);//方式2;(function($, window, document, undefined){ $.fn.extend({  pluginName : function(){   return this.each(function(){    // plugin code here   });  }; })})(jQuery, window, document);//方式3 這種類型的插件架構(gòu)允許您封裝所有的方法在父包中,通過傳遞該方法的字符串名稱和額外的此方法需要的參數(shù)來調(diào)用它們。;(function($, window, document, undefined){  // 在我們插件容器內(nèi),創(chuàng)造一個公共變量來構(gòu)建一個私有方法   var privateFunction = function() {    // code here   }   // 通過字面量創(chuàng)造一個對象,存儲我們需要的公有方法   var methods = {    // 在字面量對象中定義每個單獨的方法    init: function() {     // 為了更好的靈活性,對來自主函數(shù),并進入每個方法中的選擇器其中的每個單獨的元素都執(zhí)行代碼     return this.each(function() {      // 為每個獨立的元素創(chuàng)建一個jQuery對象      var $this = $(this);      // 創(chuàng)建一個默認設(shè)置對象      var defaults = {       propertyName: 'value',       onSomeEvent: function() {}      }         // 使用extend方法從options和defaults對象中構(gòu)造出一個settings對象      var settings = $.extend({}, defaults, options);      // 執(zhí)行代碼      // 例如: privateFunction();     });    },    destroy: function() {     // 對選擇器每個元素都執(zhí)行方法     return this.each(function() {      // 執(zhí)行代碼     });    }   };   $.fn.pluginName = function() {    // 獲取我們的方法,遺憾的是,如果我們用function(method){}來實現(xiàn),這樣會毀掉一切的    var method = arguments[0];    // 檢驗方法是否存在    if(methods[method]) {     // 如果方法存在,存儲起來以便使用     // 注意:我這樣做是為了等下更方便地使用each()     method = methods[method];      // 如果方法不存在,檢驗對象是否為一個對象(JSON對象)或者method方法沒有被傳入    } else if( typeof(method) == 'object' || !method ) {       // 如果我們傳入的是一個對象參數(shù),或者根本沒有參數(shù),init方法會被調(diào)用     method = methods.init;    } else {     // 如果方法不存在或者參數(shù)沒傳入,則報出錯誤。需要調(diào)用的方法沒有被正確調(diào)用     $.error( 'Method ' + method + ' does not exist on jQuery.pluginName' );     return this;    }      // 調(diào)用我們選中的方法    // 再一次注意我們是如何將each()從這里轉(zhuǎn)移到每個單獨的方法上的    return method.call(this);   } })(jQuery, window, document);//方式4 面向?qū)ο蟮牟寮_發(fā) 將原型和構(gòu)造函數(shù)組合使用,使得通過構(gòu)造函數(shù)創(chuàng)建的每個實例都能繼承相關(guān)屬性與方法;(function($, window, document, undefined){ //定義Beautifier的構(gòu)造函數(shù) var Beautifier = function(ele, opt) {  this.$element = ele;  this.defaults = {  'color': 'red',  'fontSize': '12px',  'textDecoration':'none'  };  this.options = $.extend({}, this.defaults, opt); } //定義Beautifier的原型方法 Beautifier.prototype = {  beautify: function() {  return this.$element.css({   'color': this.options.color,   'fontSize': this.options.fontSize,   'textDecoration': this.options.textDecoration  });  } } //在插件中使用Beautifier對象 $.fn.myPlugin = function(options) {  //創(chuàng)建Beautifier的實體  var beautifier = new Beautifier(this, options);  //調(diào)用其方法  return beautifier.beautify(); }})(jQuery, window, document);

調(diào)用方法:$.fn.pluginName();

3、通過$.widget()應(yīng)用jQuery UI的部件工廠方式創(chuàng)建
用來開發(fā)更高級jQuery部件的,該模式開發(fā)出來的部件帶有很多jQuery內(nèi)建的特性,比如插件的狀態(tài)信息自動保存,各種關(guān)于插件的常用方法等

四、編寫JQuery插件需要注意的地方
1、插件的推薦命名方法為:jquery.[插件名].js
2、所有的對象方法都應(yīng)當附加到JQuery.fn對象上面,而所有的全局函數(shù)都應(yīng)當附加到JQuery對象本身上。
3、可以通過this.each() 來遍歷所有的元素
4、在jQuery開發(fā)中,this關(guān)鍵詞通常引用的是當前正在操作的DOM元素,但在當前的jQuery插件上下文中,this關(guān)鍵詞引用的是當前jQuery實例自身,唯一的例外是在當前jQuery集合中遍歷所有元素時,$.each循環(huán)體內(nèi)的this引用的是這一輪遍歷所暴露的DOM元素
5、所有方法或函數(shù)插件,都應(yīng)當以分號結(jié)尾,否則壓縮的時候可能會出現(xiàn)問題。為了更加保險寫,可以在插件頭部添加一個分號(;),以免他們的不規(guī)范代碼給插件帶來 影響。
6、插件應(yīng)該返回一個JQuery對象,以便保證插件的可鏈式操作。

以上就是jQuery插件開發(fā)的知識點匯總,希望對大家的學(xué)習(xí)有所幫助。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费黄色在线观看网站 | 成av人在线观看 | 狠狠撸电影 | av电影免费在线看 | 成人一区二区三区四区 | 三人弄娇妻高潮3p视频 | 国产91丝袜在线播放0 | 国产无遮挡一区二区三区毛片日本 | 免费黄色一级网站 | 国产免费久久久久 | 欧美在线观看视频一区二区 | 亚洲天堂午夜 | 欧美14一15sex性hd | 国产精品影视 | 成人午夜视频免费看 | 久久亚洲精品国产一区 | 亚洲第一男人天堂 | 中国免费黄色 | 国产91一区二区三区 | 欧美成人精品一区二区 | 久久久久久久久国产 | 国产91精品久久久 | 久久99国产精品久久99果冻传媒 | 国产在线精品一区二区 | 嗯~啊~用力~高h | 3344永久免费| 看国产毛片 | 视频一区二区三区在线 | 污片视频网站 | 毛片免费视频 | 俄罗斯16一20sex牲色另类 | 色欧美视频| 欧美日韩1区2区3区 黄片毛片一级 | 亚洲网站一区 | 综合97| www.精品在线| 午夜视频在线免费观看 | 久久影院在线观看 | 关键词 | 久久精品国产99国产精品澳门 | 日本大片在线播放 |