国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

制作高質量的JQuery Plugin 插件的方法

2019-11-21 00:33:42
字體:
來源:轉載
供稿:網友
JQuery Plugin插件,如果大家不明白什么是JQuery插件或都不清楚如何編寫可以查看其官方的網站:jQuery Authoring Guidelines
好了,下面有一些我覺得想做一個好的插件必須應有的要求:
1、在JQuery命名空間下聲明只聲明一個單獨的名稱
2、接受options參數,以便控制插件的行為
3、暴露插件的默認設置 ,以便外面可以訪問
4、適當地將子函數提供給外部訪問調用
5、保持私有函數
6、支持元數據插件
下面將逐條地過一遍:
只聲明一個單獨的名稱
這表明是一個單獨的插件腳本。如果你的腳本包含多個插件或者是互補的插件(像$.fn.doSomething()和$.undoSomething()),那么你可以根據要求聲明多個名稱。但一般情況下,力爭用單一的名稱來維持插件現實的所有細節。
在本例中,我們將聲明一個叫“hilight”的名稱
復制代碼 代碼如下:

// 插件的定義
$.fn.hilight = function( options ){
// 這里就是插件的實現代碼了...
};
然后我們可以像這樣調用它:
$("divTest").hilight();

接受一個options參數,以便控件插件的行為
復制代碼 代碼如下:

$.fn.hilight = function(options){
var defaults = {
foreground : 'red',
background : 'yellow'
};
//Extends out defaults options with those privided 擴展我們默認的設置
$.extend(defaults,options);
};

而我們可以這樣使用它:
復制代碼 代碼如下:

$('#myDiv').hilight({
foreground: 'blue'
});

暴露插件的默認設置 ,以便外面可以訪問
作為插件的提升和優化,我們應該將上面的代碼暴露出來作為插件的默認設置。
這非常重要,這樣做讓使用插件的用戶可以非常容易地用最少的代碼重寫或自定義該插件。然而這個我們可以借助JavaScript function對象的優勢:
復制代碼 代碼如下:

$.fn.hilight = function(options){
//Extend our default options with those provided
//Note that the first arg to extend is an empty object
//this is to keep from overriding our "defaults" object
var opts = $.extend({},$.fn.hilight.defaults,options);
}
$.fn.hilight.defaults = {
foreground : 'red',
background : 'yellow'
};

這里值得注意的是$.extend()第一個參數是一個空的對象,這樣可以讓我們重寫插件的默認設置
用戶可以像這樣使用插件:
復制代碼 代碼如下:

// override plugin default foreground color
$.fn.hilight.defaults.foreground = 'blue';
// ...
// invoke plugin using new defaults
$('.hilightDiv').hilight();
// ...
// override default by passing options to plugin method
$('#green').hilight({
foreground: 'green'
});

適當地將子函數提供給外部訪問調用
這個例子延續前面的例子,你會發現有一個有趣的方法可以擴展你的插件(然后還可以讓其他人擴展你的插件 :))。例如,我們在插件里聲明了一個函數叫“format”用來高這顯示文本,我們的插件實現代碼可能是這樣子的:
復制代碼 代碼如下:

$.fn.hight = function(options){
//iterate and reformat each mached element
return this.each(function(){
var $this = $(this);
//...
var markup = $this.html();
//call our format function
markup = $.fn.hilight.format(markup);
$this.html(markup);
});
};
//define our format function
$.fn.hilight.format = function(txt){
return '<strong>' + txt + '</strong>';
};

保持私有函數
暴露插件有部分內容提供重寫看上去似乎非常強大,但是你必須認真地考慮你的插件哪一部分是需要暴露出來的。一旦暴露出來,你就需要考慮這些變化點,一般情況下,如果你沒有把握哪部分需要暴露出來,那么你可以不這樣做。
那如何才能夠定義更多的函數而不將其暴露出來呢?這個任務就交給閉包吧。為了證實,我們在插件中添加一個函數叫“debug”,這debug函數將會記錄已選擇的元素數量到FireBug控制臺中。為了創建閉包,我們將插件定義的整部分都包裝起來:
復制代碼 代碼如下:

//create closure
(function($){
//plugin definition
$.fn.hilight = function(options){
debug(this);
//...
};
//private function for debuggin
function debug($obj){
if(window.console && window.console.log){
window.console.log('hilight selection count :' + $obj.size());
}
}
//...
//end of closure
})(jQuery);

這樣“debug”方法就不能被閉包這外調用了
支持元數據插件
依賴于所寫的插件類型,并支持元數據插件會使得其本身更加強大。個人來講,我喜歡元素據插件,因為它能讓你分離標簽中重寫插件的配置(這在寫demo和示例時特別有用)。最重要的是,想現實它特別的容易!
復制代碼 代碼如下:

$.fn.hilight = function(options){
//build main options before element interation
var opts = $.extend({},$.fn.hilight.defaults,options);
return this.each(function(){
var $this = $(this);
//build element specific options
var o = $.meta ? $.extend({},opts,$this.data()) : opts;
//一般句話,搞定支持元數據 功能
});
}

幾行的變化完成了以下幾件事:
1、檢測元數據是否已經配置
2、如果已配置,將配置屬性與額外的元數據進行擴展
復制代碼 代碼如下:

<!-- markup -->
<div class="hilight { background: 'red', foreground: 'white' }">
Have a nice day!這是元數據
</div>
<div class="hilight { foreground: 'orange' }">
Have a nice day!在標簽中配置
</div>
<div class="hilight { background: 'green' }">
Have a nice day!
</div>

然后我們通過一句腳本就可以根據元數據配置分開地高亮顯示這些div標簽:
復制代碼 代碼如下:

$('.hilight').hilight();

最后,將全部代碼放在一起:
復制代碼 代碼如下:

//
//create closure
//
(function($){
//
// plugin definition
//
$.fn.hilight = function(options){
debug(this);
//build main options before element iteration
var opts = $.extend({}, $.fn.hilight.defaults, options);
//iterate and reformat each matched element
return this.each(function(){
$this = $(this);
//build element specific options
var o = $.meta ? $.extend({}, opts, $this.data()) : opts;
//update element styles
$this.css({
backgroundColor: o.background,
color: o.foreground
});
var markup = $this.html();
//call our format function
});
}
//
// private function for debugging
//
function debug($obj){
if(window.console && window.console.log){
window.console.log('hilight selection count: ' + $obj.size());
}
};
//
// define and expose our format function
//
$.fn.hilight.format = function(txt){
return '<strong>' + txt + '</strong>';
};
//
// plugin defaults
//
$.fn.hilight.defaults = {
foreground : 'red',
background : 'yellow'
};
//
// end of clousure
//
})(jQuery);

轉載請注明出處http://samlin.cnblogs.com
比較希望大家開發jquery plugin的時候可以在最后把方法開放出來
return {
method1: funcion() {},
method2: funcion() {}
}

這樣我們在使用的時候就可以用如下方式調用
var plugin = $("<div/>").plugin();
plugin.mehtod1();
plugin.method2();
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 滨海县| 荣昌县| 东港市| 彭山县| 红桥区| 屏东市| 安图县| 浠水县| 西乌| 都匀市| 梁河县| 临澧县| 金堂县| 师宗县| 沁水县| 邢台市| 永登县| 三台县| 库车县| 公安县| 江华| 宜黄县| 米林县| 开原市| 中牟县| 万山特区| 志丹县| 元朗区| 若羌县| 突泉县| 沭阳县| 辽源市| 若尔盖县| 昆明市| 新乡市| 藁城市| 伽师县| 贵德县| 射洪县| 叙永县| 高唐县|