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

首頁 > 編程 > JavaScript > 正文

總結jQuery插件開發中的一些要點

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

基礎
1、jQuery插件開發主要使用如下兩個方法:
1.1、添加靜態方法

jQuery.extend(object);

為擴展jQuery本身,為類添加新的方法,可以理解文添加靜態方法。

$.extend({   addMethod : function(a, b){return a + b;}  // $.addMethod(1, 2); //return 3});

1.2、添加成員方法

jQuery.fn.extend(object);jQuery.fn = jQuery.prototype

給jQuery對象添加方法,對jQuery.prototype進行擴展,為jQuery類添加成員方法:

$.fn.extend({   getInputText:function(){     $(this).click(function(){       alert($(this).val());     });   } });$("#username").getInputText();

 

2、一個通用的框架:
以下是一個通用的框架:

(function($){   $.fn.yourPluginName = function(options){     //各種屬性和參數     var options = $.extend(defaults, options);     this.each(function(){       //插件的實現代碼    });   }; })(jQuery);

關于

$.extend(defaults, options);

就是通過合并defaults和options來擴展defaults,實現插件默認參數的功能。

實踐

1、聲明插件名稱:
添加一個函數到jQuery.fn(jQuery.prototype)對象,該函數的名稱就是你的插件名稱:

jQuery.fn.myPlugin = function() { // Do your awesome plugin stuff here};

在命名不與jQuery其他函數沖突的情況,可以使用閉包的方式使用$符號:

(function( $ ) { $.fn.myPlugin = function() {  // Do your awesome plugin stuff here };})( jQuery );

2、插件中的上下文:
jQuery接收一個回調,該回調本身就指向了dom,直接使用this就相當于我們平時的$(this)的情況:

(function( $ ){ $.fn.myPlugin = function() {  // there's no need to do $(this) because  // "this" is already a jquery object  // $(this) would be the same as $($('#element'));  this.fadeIn('normal', function(){   // the this keyword is a DOM element  }); };})( jQuery );$('#element').myPlugin();

下面是一個簡單的jQuery插件,實現獲取所有div的最大高度:

(function( $ ){ $.fn.maxHeight = function() {  var max = 0;  this.each(function() {   max = Math.max( max, $(this).height() );  });  return max; };})( jQuery );var tallest = $('div').maxHeight(); // Returns the height of the tallest div

3、維護鏈接性:
前面的示例返回一個整數值最高的div,但是通常的意圖僅在某種程度上是僅修改插件的元素集合,并將它們傳遞到下一個鏈中的方法。這樣的jQuery的設計優雅的地方。所以保持鏈接性放到一個插件,您必須確保您的插件返回這個關鍵字。

(function( $ ){ $.fn.lockDimensions = function( type ) {   return this.each(function() {   var $this = $(this);   if ( !type || type == 'width' ) {    $this.width( $this.width() );   }   if ( !type || type == 'height' ) {    $this.height( $this.height() );   }  }); };})( jQuery );$('div').lockDimensions('width').css('color', 'red');

因為插件返回this關鍵字的范圍,它維護鏈接性,jQuery可以繼續利用jQuery方法,如. css。所以,如果你的插件不返回一個內在價值,你應該總是返回this。

4、參數的傳遞,Defaults和Options:

(function( $ ){ $.fn.tooltip = function( options ) {   // Create some defaults, extending them with any options that were provided  var settings = $.extend( {   'location'     : 'top',   'background-color' : 'blue'  }, options);  return this.each(function() {       // Tooltip plugin code here  }); };})( jQuery );$('div').tooltip({ 'location' : 'left'});


通過$.extend合并默認參數和調用者傳入的參數。

5、命名空間:
正確的命名空間在插件開發中是一個非常重要的部分。正確的命名空間,可以確保你的插件將有一個很低的幾率在同一個頁面上被他插件或代碼覆蓋。

在任何情況下都不應該在一個插件的jQuery.fn對象中聲稱多個名稱空間。

(function( $ ){ $.fn.tooltip = function( options ) {   // THIS }; $.fn.tooltipShow = function( ) {  // IS }; $.fn.tooltipHide = function( ) {   // BAD }; $.fn.tooltipUpdate = function( content ) {   // !!!  };})( jQuery );

你應該收集所有的方法到一個對象化字面,并且通過方法的字面值進行調用:

(function( $ ){ var methods = {  init : function( options ) {    // THIS   },  show : function( ) {   // IS  },  hide : function( ) {    // GOOD  },  update : function( content ) {    // !!!   } }; $.fn.tooltip = function( method ) {  // Method calling logic  if ( methods[method] ) {   return methods[ method ].apply( this, Array.prototype.slice.call( arguments, 1 ));  } else if ( typeof method === 'object' || ! method ) {   return methods.init.apply( this, arguments );  } else {   $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );  }   };})( jQuery );// calls the init method$('div').tooltip(); // calls the init method$('div').tooltip({ foo : 'bar'});// calls the hide method$('div').tooltip('hide'); // calls the update method$('div').tooltip('update', 'This is the new tooltip content!');

這種類型的方法封裝和體系結構在jQuery插件社區中是一個標準,它適用于無數的插件,包括jQueryUI插件和小部件。

6、Events:
Bind方法允許通過命名空間的方式綁定事件,如果你的插件綁定了事件,可以通過命名空間的方式,在解除綁定事件時,你也可以這樣做,來防止影響到其他的事件??梢酝ㄟ^“.<namespace>” 的方式來設置綁定事件的命名空間。

(function( $ ){ var methods = {   init : function( options ) {    return this.each(function(){     $(window).bind('resize.tooltip', methods.reposition);    });   },   destroy : function( ) {    return this.each(function(){     $(window).unbind('.tooltip');    })   },   reposition : function( ) {     // ...    },   show : function( ) {     // ...    },   hide : function( ) {    // ...    },   update : function( content ) {     // ...   } }; $.fn.tooltip = function( method ) {  if ( methods[method] ) {   return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));  } else if ( typeof method === 'object' || ! method ) {   return methods.init.apply( this, arguments );  } else {   $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );  }   };})( jQuery );$('#fun').tooltip();// Some time later...$('#fun').tooltip('destroy');

7、Data:
關于data方法可以參考官方的文檔:http://docs.jquery.com/Data,既是在頁面的元素中綁定存儲數據。

這里通過編寫插件,實現在頁面中的每個元素都綁定一些當前的狀態或者內容。

(function( $ ){ var methods = {   init : function( options ) {    return this.each(function(){     var $this = $(this),       data = $this.data('tooltip'),       tooltip = $('<div />', {        text : $this.attr('title')       });     // If the plugin hasn't been initialized yet     if ( ! data ) {      /* Do more setup stuff here */      $(this).data('tooltip', {        target : $this,        tooltip : tooltip      });     }    });   },   destroy : function( ) {    return this.each(function(){     var $this = $(this),       data = $this.data('tooltip');     // Namespacing FTW     $(window).unbind('.tooltip');     data.tooltip.remove();     $this.removeData('tooltip');    })   },   reposition : function( ) { // ... },   show : function( ) { // ... },   hide : function( ) { // ... },   update : function( content ) { // ...} }; $.fn.tooltip = function( method ) {  if ( methods[method] ) {   return methods[method].apply( this, Array.prototype.slice.call( arguments, 1 ));  } else if ( typeof method === 'object' || ! method ) {   return methods.init.apply( this, arguments );  } else {   $.error( 'Method ' + method + ' does not exist on jQuery.tooltip' );  }   };})( jQuery );

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
热re99久久精品国产66热| 91精品久久久久久久久久久久久| 国产一区二区视频在线观看| 久久亚洲综合国产精品99麻豆精品福利| 91精品国产777在线观看| 中文字幕自拍vr一区二区三区| 国产成人拍精品视频午夜网站| 国产偷国产偷亚洲清高网站| 91精品久久久久久久久久久| 91精品国产高清自在线看超| 97色伦亚洲国产| 国产在线久久久| 亚洲激情第一页| 成人在线观看视频网站| 在线观看国产精品91| 日韩精品免费在线视频观看| 久久精品色欧美aⅴ一区二区| 日韩影视在线观看| 中文亚洲视频在线| 91牛牛免费视频| 国产亚洲美女久久| 亚洲精品久久久久久久久| 久久久999成人| 久久精品视频99| 91黄色8090| 久久99久久久久久久噜噜| 亚洲人免费视频| 成人在线视频福利| 国产成人自拍视频在线观看| 搡老女人一区二区三区视频tv| 欧美日韩综合视频| 91精品久久久久久久久不口人| 96精品视频在线| 最近2019免费中文字幕视频三| 91久久久久久| 国产精品久久久久久久久男| 中文字幕日韩av综合精品| 亚洲欧美在线免费| 亚洲国产精品悠悠久久琪琪| 日韩中文视频免费在线观看| 久久精品国产欧美亚洲人人爽| 91爱视频在线| 国产精品18久久久久久麻辣| 久久99久国产精品黄毛片入口| 国产精品久久久久av免费| 亚洲欧美制服另类日韩| 亚洲精品98久久久久久中文字幕| xxx欧美精品| 日韩欧美在线视频免费观看| 日韩欧美一区视频| 久久精品色欧美aⅴ一区二区| 久久久久久有精品国产| 日韩亚洲欧美中文高清在线| 国产精品国产福利国产秒拍| 亚洲第一中文字幕| 久久久久久国产三级电影| 国产精品午夜一区二区欲梦| 亚洲精品国产综合区久久久久久久| 亚洲一区二区中文| 91久久久久久| 成人黄色免费在线观看| 欧美成人精品不卡视频在线观看| 欧美亚洲第一页| 日韩精品在线观看一区| 国产美女搞久久| 国模私拍一区二区三区| 国产精自产拍久久久久久蜜| 欧美日韩高清在线观看| 国产91在线播放| 亚洲字幕一区二区| 国产精品第一页在线| 国产精品爽爽爽爽爽爽在线观看| 亚洲精品720p| 国产91热爆ts人妖在线| 亚洲a区在线视频| 91久久精品在线| 亚洲国产精品一区二区久| 国产精品成人v| 日韩精品有码在线观看| 国产精品视频久久| 国产精品爱久久久久久久| 久久这里只有精品99| 亚洲精品视频免费在线观看| 亚洲电影天堂av| 黄色精品一区二区| 欧美激情网站在线观看| 欧美激情第一页xxx| 色综合亚洲精品激情狠狠| 精品国产成人在线| 91国偷自产一区二区三区的观看方式| 欧美色视频日本高清在线观看| 欧美日韩一区二区在线| 久久久中精品2020中文| 日本午夜在线亚洲.国产| 亚洲成人网av| 97精品一区二区视频在线观看| 亚洲黄色在线看| 成人黄色在线免费| 日韩在线精品一区| 亚洲电影免费观看高清完整版在线观看| 97视频在线播放| 国产噜噜噜噜噜久久久久久久久| 欧美激情免费看| 亚洲欧美日韩区| 久久久久久久97| 91香蕉亚洲精品| 爽爽爽爽爽爽爽成人免费观看| 国产精品观看在线亚洲人成网| 亚洲日本中文字幕| 欧美性极品少妇精品网站| 黑人狂躁日本妞一区二区三区| 8x拔播拔播x8国产精品| 97人人做人人爱| 国产成+人+综合+亚洲欧美丁香花| 国产精品久久久久久久7电影| 日韩高清不卡av| 九色精品免费永久在线| 国产精品久久久久秋霞鲁丝| 26uuu另类亚洲欧美日本老年| 日韩美女毛茸茸| 精品性高朝久久久久久久| 亚洲第一视频网| 欧美午夜激情小视频| 国产国语videosex另类| 夜夜嗨av色一区二区不卡| 亚洲精品国产精品久久清纯直播| 亚洲香蕉成人av网站在线观看| 亚洲欧美日韩天堂一区二区| 韩国日本不卡在线| 欧美激情综合色综合啪啪五月| 国产免费一区二区三区香蕉精| 欧美极品少妇xxxxⅹ喷水| 久久成人一区二区| 中文字幕在线看视频国产欧美在线看完整| 欧美日韩国产精品一区| 精品久久久一区二区| 日韩精品视频在线免费观看| 欧美日韩国产一区二区| 少妇av一区二区三区| 91国产中文字幕| 尤物九九久久国产精品的特点| 欧美激情视频一区二区| 亚洲一区二区三区777| 亚洲色图日韩av| 亚洲视频axxx| 亚洲一区二区三区乱码aⅴ| 久久的精品视频| 91精品视频播放| 欧洲一区二区视频| 91爱爱小视频k| 亚洲欧美日本另类| 在线观看免费高清视频97| 国产一区二区在线播放| 久久久久久久久久久av| 日韩成人在线电影网| 欧美电影在线免费观看网站| 亚洲视频一区二区| 国产精品国模在线| 成人乱色短篇合集| 日韩在线激情视频| 国产精品久久久久久久久久免费| 国模私拍视频一区| 欧美激情亚洲另类| 国产亚洲精品一区二555|