jquery插件開發(fā)模式
創(chuàng)新互聯(lián)建站于2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目網(wǎng)站設(shè)計制作、網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元原州做網(wǎng)站,已為上家服務(wù),為原州各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
jquery插件一般有三種開發(fā)方式:
通過$.extend()來擴展jQuery
通過$.fn 向jQuery添加新的方法
通過$.widget()應(yīng)用jQuery UI的部件工廠方式創(chuàng)建
第一種$.extend()相對簡單,一般很少能夠獨立開發(fā)復雜插件,第三種是一種高級的開發(fā)模式,本文也不做介紹。第二種則是一般插件開發(fā)用到的方式,本文著重講講第二種。
插件開發(fā)
第二種插件開發(fā)方式一般是如下定義
$.fn.pluginName = function() {
//your code here
}
插件開發(fā),我們一般運用面向?qū)ο蟮乃季S方式
例如定義一個對象
var Haorooms= function(el, opt) {
this.$element = el,
this.defaults = {
'color': 'red',
'fontSize': '12px',
'textDecoration':'none'
},
this.options = $.extend({}, this.defaults, opt)
}
//定義haorooms的方法
haorooms.prototype = {
changecss: function() {
return this.$element.css({
'color': this.options.color,
'fontSize': this.options.fontSize,
'textDecoration': this.options.textDecoration
});
}
}
$.extend({}, this.defaults, opt)有{}主要是為了創(chuàng)建一個新對象,保留對象的默認值。
$.fn.myPlugin = function(options) {
//創(chuàng)建haorooms的實體
var haorooms= new Haorooms(this, options);
//調(diào)用其方法
return Haorooms.changecss();
}
調(diào)用這個插件直接如下就可以
$(function() {
$('a').myPlugin({
'color': '#2C9929',
'fontSize': '20px'
});
})
上述開發(fā)方法的問題
上面的開發(fā)方法存在一個嚴重的問題,就是定義了一個全局的Haorooms,這樣對于插件的兼容等等各個方面都不好。萬一別的地方用到了Haorooms,那么你的代碼就悲催了!現(xiàn)在我們把上面的代碼包裝起來,用一個自調(diào)用匿名函數(shù)(有時又叫塊級作用域或者私有作用域)包裹,就不會出現(xiàn)這個問題了!包括js插件的開發(fā),也是一樣的,我們用一個自調(diào)用匿名函數(shù)把自己寫的代碼包裹起來,就可以了!包裹方法如下:
(function(){
})()
用上面的這個包裹起來,就可以了。
但是還有一個問題,當我們研究大牛的代碼的時候,前面經(jīng)??吹接小?;”,那是為了避免代碼合并等不必要的錯誤。
例如,我們隨便定義一個函數(shù):
var haoroomsblog=function(){
}
(function(){
})()
由于haoroomsblog這個函數(shù)后面沒有加分號,導致代碼出錯,為了避免這類情況的發(fā)生,通常這么寫!
;(function(){
})()
把你的插件代碼包裹在上面里面,就是一個簡單的插件了。(注js插件和jquery插件都是如此)
還有一個問題
把你的插件包裹在
;(function(){
})()
基本上可以說是完美了。但是為了讓你開發(fā)的插件應(yīng)用更加廣泛,兼容性更加好,還要考慮到用插件的人的一些特殊的做法,例如,有些朋友為了避免jquery和zeptojs沖突,將jquery的前綴“$”,修改為“jQuery”,還有些朋友將默認的document等方法修改。為了讓你的插件在這些東西修了了的情況下照常運行,那么我們的做法是,把代碼包裹在如下里面:
;(function($,window,document,undefined){
//我們的代碼。。
})(jQuery,window,document);
就可以避免上面的一些情況了!
至此,你開發(fā)的插件就算完美了!
我自己寫過許多插件,應(yīng)該可以解答你的問題。
其實,所謂的方法,屬性,事件,都是你自己總結(jié)出來的。對于純正的JS和JQuary來說,這3個都是一種東西。我們常常用了簡便寫法,因此樓主才覺得這3者不同,其實這些統(tǒng)統(tǒng)都是變量。
只不過,如果變量是個參數(shù),就是:
var temp = "怪蛋";
如果參數(shù)是個數(shù)組,那么就是:
var temp = {title:'newTab'};
而我們常見的函數(shù),都會寫成getVal(a,b,c){}其實寫的更符合JS原生態(tài)的,是
var getVal = function(a,b,c){} 從這里看出,我們所謂的函數(shù),其實和變量是一種東西。
因此所謂的$('#id').Tabs({onSelect:functuon(){}});這類情況,等于傳入的是一個叫onSelect的變量,而這個變量剛好是一個函數(shù)類型而已。事實上這個onSelect原本并不存在,是你后來的插件里去調(diào)用了而已。你通過英文意思覺得這是“被選中”的意思,其實在這里,僅僅是一個名字而已。只有插件內(nèi)部寫到$(this).on("click",function(){});才真正調(diào)取到JS原本的event的click事件。而我們插件中常見的onSelect、onClick、onSuccess都是寫插件的人按照自己的喜好和大家喜歡的名字而命名的。
jQuery為開發(fā)插件提拱了兩個方法,分別是:
jQuery.fn.extend(object); 給jQuery對象添加方法。
jQuery.extend(object); 為擴展jQuery類本身.為類添加新的方法。
fn 是什么東西呢。查看jQuery代碼,就不難發(fā)現(xiàn)。
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {//....
//......
};
原來 jQuery.fn = jQuery.prototype.對prototype肯定不會陌生啦。雖然 javascript 沒有明確的類的概念,但是用類來理解它,會更方便。jQuery便是一個封裝得非常好的類,比如我們用 語句 $("#btn1") 會生成一個 jQuery類的實例。
jQuery.fn.extend(object); 對jQuery.prototype進得擴展,就是為jQuery類添加“成員函數(shù)”。jQuery類的實例可以使用這個“成員函數(shù)”。
比如我們要開發(fā)一個插件,做一個特殊的編輯框,當它被點擊時,便alert 當前編輯框里的內(nèi)容??梢赃@么做:
$.fn.extend({
alertWhileClick:function(){
$(this).click(function(){
alert($(this).val());
});
}
});
$("#input1").alertWhileClick(); //頁面上為:input id="input1" type="text"/
$("#input1") 為一個jQuery實例,當它調(diào)用成員方法 alertWhileClick后,便實現(xiàn)了擴展,每次被點擊時它會先彈出目前編輯里的內(nèi)容。
jQuery.extend(object);
為jQuery類添加添加類方法,可以理解為添加靜態(tài)方法。如:
$.extend({
add:function(a,b){return a+b;}
});
便為 jQuery 添加一個為 add 的 “靜態(tài)方法”,之后便可以在引入 jQuery 的地方,使用這個方法了,$.add(3,4); //return 7
jQuery 如何寫插件 -
jQuery插件的開發(fā)包括兩種:
一種是類級別的插件開發(fā),即給jQuery添加新的全局函數(shù),相當于給jQuery類本身添加方法。jQuery的全局函數(shù)就是屬于jQuery命名空間的函數(shù),另一種是對象級別的插件開發(fā),即給jQuery對象添加方法。下面就兩種函數(shù)的開發(fā)做詳細的說明。
1、類級別的插件開發(fā)
類級別的插件開發(fā)最直接的理解就是給jQuery類添加類方法,可以理解為添加靜態(tài)方法。典型的例子就是$.AJAX()這個函數(shù),將函數(shù)定義于jQuery的命名空間中。關(guān)于類級別的插件開發(fā)可以采用如下幾種形式進行擴展:
1.1?
添加一個新的全局函數(shù)
添加一個全局函數(shù),我們只需如下定義:
jQuery.foo =?
function() {?
alert('This is a test. This is only a?
test.');?
};?
1.2?
增加多個全局函數(shù)
添加多個全局函數(shù),可采用如下定義:
Java代碼 收藏代碼
jQuery.foo = function() {?
alert('This is a test. This is?
only a test.');?
};?
jQuery.bar =?
function(param) {?
alert('This function takes a?
parameter, which is "' + param + '".');?
};?
調(diào)用時和一個函數(shù)的一樣的:jQuery.foo();jQuery.bar();或者$.foo();$.bar('bar');
1.3?
使用jQuery.extend(object);
jQuery.extend({?
foo:?
function() {?
alert('This is a test. This is?
only a test.');?
},?
bar: function(param)?
{?
alert('This function takes a?
parameter, which is "' + param +'".');?
}?
});
//類級別插件開發(fā),主要是在jQuery中定義全局方法:
//第一種寫法
jQuery.myFunc = function(str){
alert("直接在jquery中定義方法",str)
}
//調(diào)用方式 $.myFunc("hello!");
//第二種寫法
jQuery.extend({
myFunc:function(str){
alert("extend擴展$的方法",str)
}
})
//調(diào)用方式 $.myFunc("hello!");
//第三種寫法: 為了不污染全局,掛載一個對象作為命名空間,自定義的所有方法放在這里,保證jQuery全局安全。
jQuery.define={
myFunc:function(str){
alert("命名空間的寫法",str)
}
}
//調(diào)用方式:$.define.myFunc("hello");
//以上三種是級別插件開發(fā)方式,不常用,從調(diào)用方式看出,他們是全局執(zhí)行的,不需要綁定節(jié)點對象。
//對象級別插件開發(fā):有規(guī)范模板
;(function($){
$.fn.plugin = function(options){
var defaults = {
//各種默認參數(shù)
}
var options = $.extend(defaults,options); //傳入的參數(shù)覆蓋默認參數(shù)
this.each(function(){
var _this = $(this); //緩存一下插件傳進來的節(jié)點對象。
//執(zhí)行內(nèi)容
})
return $(this); //把節(jié)點對象返回去,為了支持鏈式調(diào)用。
}
})(jQuery);
//調(diào)用方式
$("selector").plugin({
//自定義參數(shù),json格式
})
現(xiàn)在網(wǎng)上關(guān)于js和jquery封裝的插件很多,我剛剛接觸前端的時候,就很敬佩那些自己寫插件的大牛們!因為是他們給網(wǎng)站開發(fā)更多的便利,很多網(wǎng)頁效果,網(wǎng)上很多現(xiàn)成的插件!那么這些插件是如何寫的呢看首先是有扎實的js和jquery技術(shù)基礎(chǔ),其次還有一些寫插件的方法和技巧。關(guān)于js和jquery的技術(shù)基礎(chǔ),那是一個慢慢積累的過程。但是關(guān)于寫插件的一些注意和技巧,本文可以略微介紹一下,方便以后寫插件的時候用得到。
jquery插件開發(fā)模式
jquery插件一般有三種開發(fā)方式:
通過$.extend()來擴展jQuery
通過$.fn 向jQuery添加新的方法
通過$.widget()應(yīng)用jQuery UI的部件工廠方式創(chuàng)建
第一種$.extend()相對簡單,一般很少能夠獨立開發(fā)復雜插件,第三種是一種高級的開發(fā)模式,本文也不做介紹。第二種則是一般插件開發(fā)用到的方式,本文著重講講第二種。
文章題目:jquery插件的開發(fā),jquery組件開發(fā)
地址分享:http://www.rwnh.cn/article36/dssdgpg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供靜態(tài)網(wǎng)站、企業(yè)網(wǎng)站制作、軟件開發(fā)、網(wǎng)站維護、ChatGPT、外貿(mào)網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)