一步一步教你寫一個(gè)jQuery的插件教程(Plugin)
jQuery 的plugin開發(fā)需要注意的事情,
1. 明確jQuery的命名空間只有一個(gè)。
2. 明白o(hù)ptions參數(shù)用來控制plugin的行為。
3. 為默認(rèn)的plugin設(shè)定提供公共的訪問權(quán)限。
4. 為子函數(shù)提供公共的訪問權(quán)限。
5. 私有的函數(shù)絕對是私有訪問
6. 支持metadata plugin。
我將會在下面的例子中一個(gè)一個(gè)的說明上面這幾個(gè)條件,做完這些事情后我們就會創(chuàng)建一個(gè)高亮顯示text的簡單插件。
1. 明確jQuery的命名空間只有一個(gè)
在我們的例子里,我們將會命名這個(gè)插件名字為hilight,
也就是我們的plugin可以通過下面的方法來使用:
為什么jQuery的plugin只有一個(gè)命名空間?可能是設(shè)計(jì)的要求,或者是這樣的話可讀性更強(qiáng),亦或是為了面向?qū)ο蟮脑O(shè)計(jì)模式。
2.明白o(hù)ptions參數(shù)來控制plugin的行為。
讓我們先為我們的hilight插件明確一下foreground和background的顏色。我們應(yīng)該能夠允許這兩個(gè)option作為option對象傳遞給plugin的主函數(shù)。例如:
現(xiàn)在插件能夠設(shè)定如下的屬性:
3. 為默認(rèn)的plugin設(shè)定提供公共的訪問權(quán)限。
我們這里可以改進(jìn)一下,就是讓上面的代碼能夠設(shè)置能夠擴(kuò)展。這樣當(dāng)使用這個(gè)插件的用戶能夠使用最少的代碼重載我們的option。這也就是我們開始使用function對象的好處。
現(xiàn)在用戶可以在他們的script中使用一行代碼來設(shè)置foreground屬性:
有了上面的代碼我們就可以把某個(gè)DOM控件的foregrounf顏色設(shè)定為blue了。
4. 為子函數(shù)提供公共的訪問權(quán)限
這個(gè)條款和上面的相仿,能很有趣的讓你的Plugin有擴(kuò)展功能。例如:在lilight的plugin中我們能夠定義一個(gè)function是format,可以定義hilight的text的形式。我們的plugin代碼將會顯示如下:
這里我們可以很容易支持另外的一個(gè)option對象來通過一個(gè)callback 函數(shù)來重載默認(rèn)的formatting。那將會是另外一個(gè)不錯(cuò)的支持自定義的方式。
5. 私有的函數(shù)絕對是私有訪問
公開plugin的一些Option能夠被自定義當(dāng)然是個(gè)非常強(qiáng)大的功能。但是你需要考慮哪部分應(yīng)該被公開,哪部分不應(yīng)該通過外部訪問,否則會破會你已經(jīng)封裝好的結(jié)果。
這里debug方法不能從外部訪問,因?yàn)樗趐lugin的展現(xiàn)中屬于私有的方法。
6.支持metadata plugin。
使用Metadata Plugin需要看你的plugin是什么類型,可能它會使你的插件功能更加強(qiáng)大。個(gè)人來說,我比較喜歡metadata plugin是因?yàn)樗芘甲屛业膒lguin的option通過標(biāo)記重載。
如果metadata plugin能夠成功的封裝到我們的插件,那么可以通過下面的標(biāo)記來使用這個(gè)lilight插件。
最終代碼如下:
//
// 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
markup = $.fn.hilight.format(markup);
$this.html(markup);
});
};
//
// 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 closure
//
})(jQuery);
- mysql自動停止 Plugin FEDERATED is disabled 的完美解決方法
- jQuery多媒體插件jQuery Media Plugin使用詳解
- Ext4.2的Ext.grid.plugin.RowExpander無法觸發(fā)事件解決辦法
- jQuery中關(guān)于ScrollableGridPlugin.js(固定表頭)插件的使用逐步解析
- JQuery制作的放大效果的popup對話框(未添加任何jquery plugin)分享
- MySql報(bào)錯(cuò)Table mysql.plugin doesn’t exist的解決方法
- DIY jquery plugin - tabs標(biāo)簽切換實(shí)現(xiàn)代碼
- 制作高質(zhì)量的JQuery Plugin 插件的方法
- LazyForm jQuery plugin 定制您的CheckBox Radio和Select
- Maven的幾個(gè)常用plugin
相關(guān)文章
jquery獲取并修改觸發(fā)事件的DOM元素示例【基于target 屬性】
這篇文章主要介紹了jquery獲取并修改觸發(fā)事件的DOM元素,結(jié)合實(shí)例形式分析了jQuery基于target 屬性獲取到觸發(fā)該事件的dom并修改的相關(guān)操作技巧,需要的朋友可以參考下2019-10-10jquery實(shí)現(xiàn)的簡單二級菜單效果代碼
這篇文章主要介紹了jquery實(shí)現(xiàn)的簡單二級菜單效果代碼,通過簡單的jQuery控制鼠標(biāo)事件及鏈?zhǔn)讲僮鲗?shí)現(xiàn)二級菜單切換的功能,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-09-09輕松實(shí)現(xiàn)jQuery添加刪除按鈕Click事件
這篇文章主要為大家詳細(xì)介紹了如何輕松實(shí)現(xiàn)jQuery添加刪除按鈕Click事件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03基于jquery實(shí)現(xiàn)人物頭像跟隨鼠標(biāo)轉(zhuǎn)動
一款非常乖巧的人物頭像跟隨鼠標(biāo)轉(zhuǎn)動效果,在瀏覽器屏幕內(nèi),人物臉龐始終面向鼠標(biāo)轉(zhuǎn)動,本篇文章給大家介紹基于jquery實(shí)現(xiàn)人物頭像跟隨鼠標(biāo)轉(zhuǎn)動,有需要的朋友可以參考下2015-08-08jQuery動態(tài)移除與增加onclick屬性的方法詳解
這篇文章主要介紹了jQuery動態(tài)移除與增加onclick屬性的方法,結(jié)合實(shí)例形式分析了jQuery使用attr與removeAttr方法針對元素屬性動態(tài)操作相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下2018-06-06