jQuery 如何寫插件 -
輝南ssl適用于網(wǎng)站、小程序/APP、API接口等需要進(jìn)行數(shù)據(jù)傳輸應(yīng)用場(chǎng)景,ssl證書未來市場(chǎng)廣闊!成為成都創(chuàng)新互聯(lián)的ssl證書銷售渠道,可以享受市場(chǎng)價(jià)格4-6折優(yōu)惠!如果有意向歡迎電話聯(lián)系或者加微信:18980820575(備注:SSL證書合作)期待與您的合作!
jQuery插件的開發(fā)包括兩種:
一種是類級(jí)別的插件開發(fā),即給jQuery添加新的全局函數(shù),相當(dāng)于給jQuery類本身添加方法。jQuery的全局函數(shù)就是屬于jQuery命名空間的函數(shù),另一種是對(duì)象級(jí)別的插件開發(fā),即給jQuery對(duì)象添加方法。下面就兩種函數(shù)的開發(fā)做詳細(xì)的說明。
1、類級(jí)別的插件開發(fā)
類級(jí)別的插件開發(fā)最直接的理解就是給jQuery類添加類方法,可以理解為添加靜態(tài)方法。典型的例子就是$.AJAX()這個(gè)函數(shù),將函數(shù)定義于jQuery的命名空間中。關(guān)于類級(jí)別的插件開發(fā)可以采用如下幾種形式進(jìn)行擴(kuò)展:
1.1?
添加一個(gè)新的全局函數(shù)
添加一個(gè)全局函數(shù),我們只需如下定義:
jQuery.foo =?
function() {?
alert('This is a test. This is only a?
test.');?
};?
1.2?
增加多個(gè)全局函數(shù)
添加多個(gè)全局函數(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í)和一個(gè)函數(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 +'".');?
}?
});
jQuery插件 要使用它的話 通常插件中都有demo或者api可以查閱\x0d\x0a通常jQuery插件為了減小體積 會(huì)發(fā)布兩個(gè)版本 XXX.js和XXX.min.js\x0d\x0a\x0d\x0a如果你要修改插件需要使用XXX.js文件\x0d\x0a\x0d\x0a首先 你要知道它怎么用,先有一個(gè)可用的demo(沒有demo就自己寫一個(gè)),然后用webkit內(nèi)核或firefox進(jìn)行斷點(diǎn)查看,這主要是為了找插件入口點(diǎn),當(dāng)然 你也可以直接查看js代碼 這需要一定的底子\x0d\x0a最后 就是慢慢查看他的代碼的實(shí)現(xiàn)功能了,先得看懂他是怎么實(shí)現(xiàn)的,然后你才會(huì)知道怎么改.\x0d\x0a\x0d\x0ajQuery插件我也寫的不少 像 模擬alert/confirm/prompt 錯(cuò)誤信息提示框 模擬彈出窗體 無(wú)縫marquee滾動(dòng) 分頁(yè)控件 拖拽控件等等\x0d\x0a\x0d\x0ajQuery插件的框架寫法通常是\x0d\x0a\x0d\x0a(function($){\x0d\x0a $.fn.extend({\x0d\x0a fnKey:function(){}\x0d\x0a })\x0d\x0a //或者\(yùn)x0d\x0a $.fn.fnKey=function(){}\x0d\x0a})(jQuery)\x0d\x0a\x0d\x0a上面的兩種寫法的調(diào)用 方式 是\x0d\x0a\x0d\x0a$("XXX").fnKey()進(jìn)行調(diào)用的\x0d\x0a\x0d\x0a還有一種寫法:\x0d\x0avar fnClass = function(){\x0d\x0a this.fnKey=function(){\x0d\x0a }\x0d\x0a this.props="";\x0d\x0a}\x0d\x0a\x0d\x0a這種寫法是的調(diào)用 方式是\x0d\x0afnClass obj = new fnClass();\x0d\x0aobj.fnKey();\x0d\x0a\x0d\x0a第二種寫法是js的面向?qū)ο缶幊?得自己慢慢的理解哈
為了方便用戶創(chuàng)建插件,jquery提供了jQuery.extend()和jQuery.fn.extend()方法。
1.?jQuery.extend()?方法有一個(gè)重載。
?jQuery.extend(object)?,一個(gè)參數(shù)的用于擴(kuò)展jQuery類本身,也就是用來在jQuery類/命名空間上增加新函數(shù),或者叫靜態(tài)方法,例如jQuery內(nèi)置的?ajax方法都是用jQuery.ajax()這樣調(diào)用的,有點(diǎn)像?“類名.方法名”?靜態(tài)方法的調(diào)用方式。下面我們也來寫個(gè)jQuery.extend(object)的例子:
//擴(kuò)展jQuery對(duì)象本身
jQuery.extend({
"minValue":?function?(a,?b)?{
///《summary
///?比較兩個(gè)值,返回最小值
///《/summary
return?a?《?b???a?:?b;
},
"maxValue":?function?(a,?b)?{
///《summary
///?比較兩個(gè)值,返回最大值
///《/summary
return?a??b???a?:?b;
}
});
//調(diào)用
var?i?=?100;?j?=?101;
var?min_v?=?$.minValue(i,?j);?//?min_v?等于?100
var?max_v?=?$.maxValue(i,?j);?//?max_v?等于?101
重載版本:jQuery.extend([deep],?target,?object1,?[objectN])
用一個(gè)或多個(gè)其他對(duì)象來擴(kuò)展一個(gè)對(duì)象,返回被擴(kuò)展的對(duì)象。
如果不指定target,則給jQuery命名空間本身進(jìn)行擴(kuò)展。這有助于插件作者為jQuery增加新方法。
如果第一個(gè)參數(shù)設(shè)置為true,則jQuery返回一個(gè)深層次的副本,遞歸地復(fù)制找到的任何對(duì)象。否則的話,副本會(huì)與原對(duì)象共享結(jié)構(gòu)。
未定義的屬性將不會(huì)被復(fù)制,然而從對(duì)象的原型繼承的屬性將會(huì)被復(fù)制。
參數(shù)
deep:???????可選。如果設(shè)為true,則遞歸合并。
target:?????待修改對(duì)象。
object1:???待合并到第一個(gè)對(duì)象的對(duì)象。
objectN:???可選。待合并到第一個(gè)對(duì)象的對(duì)象。
示例1:
合并?settings?和?options,修改并返回?settings。
var?settings?=?{?validate:?false,?limit:?5,?name:?"foo"?};
var?options?=?{?validate:?true,?name:?"bar"?};
jQuery.extend(settings,?options);
結(jié)果:
settings?==?{?validate:?true,?limit:?5,?name:?"bar"?}
示例2:
合并?defaults?和?options,?不修改?defaults。
var?empty?=?{};
var?defaults?=?{?validate:?false,?limit:?5,?name:?"foo"?};
var?options?=?{?validate:?true,?name:?"bar"?};
var?settings?=?jQuery.extend(empty,?defaults,?options);
結(jié)果:
settings?==?{?validate:?true,?limit:?5,?name:?"bar"?}
empty?==?{?validate:?true,?limit:?5,?name:?"bar"?}
這個(gè)重載的方法,我們一般用來在編寫插件時(shí)用自定義插件參數(shù)去覆蓋插件的默認(rèn)參數(shù)。
jQuery.fn.extend(object)擴(kuò)展?jQuery?元素集來提供新的方法(通常用來制作插件)。
首先我們來看fn?是什么東西呢。查看jQuery代碼,就不難發(fā)現(xiàn)。
jQuery.fn?=?jQuery.prototype?=?{
init:?function(?selector,?context?)?{.....};
};
原來?jQuery.fn?=?jQuery.prototype,也就是jQuery對(duì)象的原型。那jQuery.fn.extend()方法就是擴(kuò)展jQuery對(duì)象的原型方法。我?們知道擴(kuò)展原型上的方法,就相當(dāng)于為對(duì)象添加”成員方法“,類的”成員方法“要類的對(duì)象才能調(diào)用,所以使用?jQuery.fn.extend(object)擴(kuò)展的方法,?jQuery類的實(shí)例可以使用這個(gè)“成員函數(shù)”。jQuery.fn.extend(object)和jQuery.extend(object)方法一?定要區(qū)分開來。
名稱欄目:jquery插件教程,jquery插件編寫
文章來源:http://chinadenli.net/article18/dsdicdp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供域名注冊(cè)、網(wǎng)頁(yè)設(shè)計(jì)公司、品牌網(wǎng)站制作、標(biāo)簽優(yōu)化、自適應(yīng)網(wǎng)站、小程序開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)