亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

jQuery插件開發匯總

2019-11-20 10:03:18
字體:
來源:轉載
供稿:網友

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

1、deep 如果是true,合并成為遞歸(又叫做深拷貝)
2、target 一個對象,如果附加的對象被傳遞給這個方法將那么它將接收新的屬性,如果它是唯一的參數則將擴展jQuery的命名空間,這對于插件開發者希望向 jQuery 中添加新函數時是很有用的。
3、object1 一個對象,它包含額外的屬性合并到第一個參數
4、包含額外的屬性合并到第一個參數
當我們提供兩個或多個對象給/(.extend(),對象的所有屬性都添加到目標對象(target參數) 目標對象(第一個參數)將被修改,并且將通過/).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對象上面;

總結

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

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

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

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

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

調用方法:$.pluginName();

2、對象級別的插件開發
對象級別插件寫法:

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

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

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

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

以上就是jQuery插件開發的知識點匯總,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
全色精品综合影院| 成人免费视频网址| 国产精品第一区| 亚洲精品资源在线| 日韩电影中文字幕| 国产精品麻豆va在线播放| 国产精品久久久久久婷婷天堂| 国产精品视频久久久久| 亚洲自拍中文字幕| 中文字幕亚洲国产| 久久国产精品久久久久| 97在线视频免费观看| 欧美日韩国产精品一区| 久久免费高清视频| 国产女人精品视频| 亚洲白虎美女被爆操| 久久大大胆人体| 欧美一级电影免费在线观看| 日韩美女免费线视频| 亚洲影视九九影院在线观看| 国产精品天天狠天天看| 久久精品久久久久久国产 免费| 韩剧1988在线观看免费完整版| 亚洲美女性视频| 中文字幕日韩精品有码视频| 色一区av在线| 九九精品在线视频| 国产日韩精品电影| 亚洲国产精品久久91精品| 亚洲欧美国产一本综合首页| 久久777国产线看观看精品| 日产日韩在线亚洲欧美| 国产丝袜高跟一区| 欧美性做爰毛片| 色黄久久久久久| 亚洲男人天堂古典| 色中色综合影院手机版在线观看| 精品国产一区二区在线| 国产成人亚洲综合青青| 色综合视频网站| 日韩中文字幕在线观看| 午夜精品99久久免费| 久久综合免费视频影院| 日韩av中文在线| 久久99热这里只有精品国产| 欧美wwwwww| 成人久久一区二区| 亚洲字幕在线观看| 九九久久久久99精品| 日韩电影网在线| 这里只有视频精品| 久久这里只有精品视频首页| 日韩av电影在线网| 久久天天躁狠狠躁夜夜躁| 国产精品女主播视频| 国产精品久久久久久久美男| 精品女同一区二区三区在线播放| 久久久女人电视剧免费播放下载| 一本色道久久88亚洲综合88| 色偷偷91综合久久噜噜| www.日韩av.com| 亚洲成年人在线| 欧美日韩中文字幕| 疯狂做受xxxx高潮欧美日本| 国产精品视频色| 97在线日本国产| 久久九九国产精品怡红院| 97涩涩爰在线观看亚洲| 国产99久久久欧美黑人| 国产欧美日韩专区发布| 一本色道久久88精品综合| 91免费高清视频| 久久天天躁狠狠躁夜夜av| 91中文字幕在线观看| 亚洲成人免费在线视频| 国产精品尤物福利片在线观看| 亚洲最大福利网| 日韩美女中文字幕| 欧美影院成年免费版| 亚洲日韩欧美视频| 色综合视频网站| 97香蕉超级碰碰久久免费的优势| 久久中文字幕一区| 色狠狠久久aa北条麻妃| 久久久精品网站| 日本一区二三区好的精华液| 96精品视频在线| 欧美成人免费va影院高清| 久久久久久久成人| 欧美成人一区在线| 国产精品久久久久久久9999| 国产精品欧美激情在线播放| 欧美中文在线免费| 欧美视频二区36p| 日韩暖暖在线视频| 欧美在线影院在线视频| 日韩在线不卡视频| 亚洲精品天天看| 国产精品黄视频| 国产成人精品在线观看| 亚洲桃花岛网站| 亚洲国产精品系列| 亚洲一区二区福利| 2019日本中文字幕| 国产成人短视频| 日韩**中文字幕毛片| 精品综合久久久久久97| 欧美日韩午夜激情| 国产做受高潮69| 欧美性xxxx极品高清hd直播| 亚洲女人天堂色在线7777| 日韩天堂在线视频| 神马久久桃色视频| 精品视频在线导航| 成人激情视频小说免费下载| 欧美日韩美女视频| 久久久精品中文字幕| 久久亚洲精品毛片| 亚洲精品第一国产综合精品| 91精品国产乱码久久久久久蜜臀| 欧美黑人一区二区三区| 久久久精品视频在线观看| 精品久久久久久国产91| 深夜福利亚洲导航| 久国内精品在线| 亚洲国产另类久久精品| 亚洲精品美女网站| 国产欧美在线播放| 国产精品海角社区在线观看| 亚洲欧洲国产伦综合| 国产亚洲人成a一在线v站| 性色av香蕉一区二区| 亚洲人成网站色ww在线| 欧美午夜精品在线| 日韩av影片在线观看| 亚洲精品小视频| 国产一区二区在线播放| 日本精品久久久久久久| 国产成人免费av| 黑人狂躁日本妞一区二区三区| 国产97人人超碰caoprom| 一本色道久久88亚洲综合88| 青青久久av北条麻妃海外网| 亚洲天堂精品在线| 一本一本久久a久久精品牛牛影视| 亚洲黄在线观看| 日av在线播放中文不卡| 欧美成人亚洲成人日韩成人| 成人精品aaaa网站| 92国产精品久久久久首页| 久久久91精品| 亚洲一区二区三区777| 欧美黄色片在线观看| 亚洲的天堂在线中文字幕| 欧美国产乱视频| 亚洲色图国产精品| 欧美精品生活片| 日韩av第一页| 欧美整片在线观看| 精品成人国产在线观看男人呻吟| 亚洲片av在线| 亚洲成人av片在线观看| 亚洲第一视频在线观看| 欧美日韩国产成人高清视频|