真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

jquery插件開(kāi)發(fā),jquery擁有成熟插件

jquery 簡(jiǎn)介

JQuery是繼prototype之后又一個(gè)優(yōu)秀的Javascript庫(kù)。它是輕量級(jí)的js庫(kù) ,它兼容CSS3,還兼容各種瀏覽器(IE 6.0+, FF1.5+, Safari 2.0+, Opera 9.0+),jQuery2.0及后續(xù)版本將不再支持IE6/7/8瀏覽器。jQuery使用戶能更方便地處理HTML(標(biāo)準(zhǔn)通用標(biāo)記語(yǔ)言下的一個(gè)應(yīng)用)、events、實(shí)現(xiàn)動(dòng)畫(huà)效果,并且方便地為網(wǎng)站提供AJAX交互。jQuery還有一個(gè)比較大的優(yōu)勢(shì)是,它的文檔說(shuō)明很全,而且各種應(yīng)用也說(shuō)得很詳細(xì),同時(shí)還有許多成熟的插件可供選擇。jQuery能夠使用戶的html頁(yè)面保持代碼和html內(nèi)容分離,也就是說(shuō),不用再在html里面插入一堆js來(lái)調(diào)用命令了,只需要定義id即可。

錯(cuò)那網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),錯(cuò)那網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為錯(cuò)那成百上千提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\外貿(mào)網(wǎng)站建設(shè)要多少錢,請(qǐng)找那個(gè)售后服務(wù)好的錯(cuò)那做網(wǎng)站的公司定做!

jQuery是一個(gè)兼容多瀏覽器的javascript庫(kù),核心理念是write less,do more(寫(xiě)得更少,做得更多)。jQuery在2006年1月由美國(guó)人John Resig在紐約的barcamp發(fā)布,吸引了來(lái)自世界各地的眾多JavaScript高手加入,由Dave Methvin率領(lǐng)團(tuán)隊(duì)進(jìn)行開(kāi)發(fā)。如今,jQuery已經(jīng)成為最流行的javascript庫(kù),在世界前10000個(gè)訪問(wèn)最多的網(wǎng)站中,有超過(guò)55%在使用jQuery。

jQuery是免費(fèi)、開(kāi)源的,使用MIT許可協(xié)議。jQuery的語(yǔ)法設(shè)計(jì)可以使開(kāi)發(fā)更加便捷,例如操作文檔對(duì)象、選擇DOM元素、制作動(dòng)畫(huà)效果、事件處理、使用Ajax以及其他功能。除此以外,jQuery提供API讓開(kāi)發(fā)者編寫(xiě)插件。其模塊化的使用方式使開(kāi)發(fā)者可以很輕松的開(kāi)發(fā)出功能強(qiáng)大的靜態(tài)或動(dòng)態(tài)網(wǎng)頁(yè)。

jQuery,顧名思義,也就是JavaScript和查詢(Query),即是輔助JavaScript開(kāi)發(fā)的庫(kù)。

歷史

大概在 1992 年,一家稱作 Nombas 的公司開(kāi)發(fā)了一種叫做 C 減減(C-minus-minus,簡(jiǎn)稱 Cmm)的嵌入式腳本語(yǔ)言。Cmm 背后的理念很簡(jiǎn)單:一個(gè)足夠強(qiáng)大可以替代宏操作(macro)的腳本語(yǔ)言,同時(shí)保持與 C (和 C ++)足夠的相似性,以便開(kāi)發(fā)人員能很快學(xué)會(huì)。這個(gè)腳本語(yǔ)言捆綁在一個(gè)叫做 CEnvi 的共享軟件中,它首次向開(kāi)發(fā)人員展示了這種語(yǔ)言的威力。

Nombas 最終把 Cmm 的名字改成了 ScriptEase,原因是后面的部分(mm)聽(tīng)起來(lái)過(guò)于消極,同時(shí)字母 C “令人害怕”。

當(dāng) Netscape Navigator 嶄露頭角時(shí),Nombas 開(kāi)發(fā)了一個(gè)可以嵌入網(wǎng)頁(yè)中的 CEnvi 的版本。這些早期的試驗(yàn)被稱為 Espresso Page(濃咖啡般的頁(yè)面),它們代表了第一個(gè)在萬(wàn)維網(wǎng)上使用的客戶端語(yǔ)言。而 Nombas 絲毫沒(méi)有料到它的理念將會(huì)成為萬(wàn)維網(wǎng)的一塊重要基石。

當(dāng)網(wǎng)上沖浪越來(lái)越流行時(shí),對(duì)于開(kāi)發(fā)客戶端腳本的需求也逐漸增大。此時(shí),大部分因特網(wǎng)用戶還僅僅通過(guò) 28.8 kbit/s 的調(diào)制解調(diào)器連接到網(wǎng)絡(luò),即便這時(shí)網(wǎng)頁(yè)已經(jīng)不斷地變得更大和更復(fù)雜。而更加加劇用戶痛苦的是,僅僅為了簡(jiǎn)單的表單有效性驗(yàn)證,就要與服務(wù)器進(jìn)行多次地往返交互。設(shè)想一下,用戶填完一個(gè)表單,點(diǎn)擊提交按鈕,等待了 30 秒的處理后,看到的卻是一條告訴你忘記填寫(xiě)一個(gè)必要的字段。

那時(shí)正處于技術(shù)革新最前沿的 Netscape,開(kāi)始認(rèn)真考慮開(kāi)發(fā)一種客戶端腳本語(yǔ)言來(lái)解決簡(jiǎn)單的處理問(wèn)題。

當(dāng)時(shí)工作于 Netscape 的 Brendan Eich,開(kāi)始著手為即將在 1995 年發(fā)行的 Netscape Navigator 2.0 開(kāi)發(fā)一個(gè)稱之為 LiveScript 的腳本語(yǔ)言,當(dāng)時(shí)的目的是在瀏覽器和服務(wù)器(本來(lái)要叫它 LiveWire)端使用它。Netscape 與 Sun 及時(shí)完成 LiveScript 實(shí)現(xiàn)。

就在 Netscape Navigator 2.0 即將正式發(fā)布前,Netscape 將其更名為 JavaScript,目的是為了利用 Java 這個(gè)因特網(wǎng)時(shí)髦詞匯。Netscape 的賭注最終得到回報(bào),JavaScript 從此變成了因特網(wǎng)的必備組件。

因?yàn)?JavaScript 1.0 如此成功,Netscape 在 Netscape Navigator 3.0 中發(fā)布了 1.1 版。恰巧那個(gè)時(shí)候,微軟決定進(jìn)軍瀏覽器,發(fā)布了 IE 3.0 并搭載了一個(gè) JavaScript 的克隆版,叫做 JScript(這樣命名是為了避免與 Netscape 潛在的許可糾紛)。微軟步入 Web 瀏覽器領(lǐng)域的這重要一步雖然令其聲名狼藉,但也成為 JavaScript 語(yǔ)言發(fā)展過(guò)程中的重要一步。

在微軟進(jìn)入后,有 3 種不同的 JavaScript 版本同時(shí)存在:Netscape Navigator 3.0 中的 JavaScript、IE 中的 JScript 以及 CEnvi 中的 ScriptEase。與 C 和其他編程語(yǔ)言不同的是,JavaScript 并沒(méi)有一個(gè)標(biāo)準(zhǔn)來(lái)統(tǒng)一其語(yǔ)法或特性,而這 3 種不同的版本恰恰突出了這個(gè)問(wèn)題。隨著業(yè)界擔(dān)心的增加,這個(gè)語(yǔ)言的標(biāo)準(zhǔn)化顯然已經(jīng)勢(shì)在必行。

2006年1月,jQuery的第一個(gè)版本面世,至今已經(jīng)有10年多了(注:這個(gè)時(shí)間點(diǎn)是截止至出書(shū)時(shí)間)。雖然過(guò)了這么久,但它依然以其簡(jiǎn)潔、靈活的編程風(fēng)格讓人一見(jiàn)傾心。在本篇文章中,我們將講述jQuery的發(fā)展 歷史 ,讓讀者對(duì)jQuery有更多的了解。

在jQuery迅速發(fā)展的同時(shí),一些大的廠商也看中了商機(jī)。2009年9月,微軟和諾基亞公司正式宣布支持開(kāi)源的jQuery庫(kù),另外,微軟公司還宣稱他們將把jQuery作為Visual Studio工具集的一部分。他將提供包括jQuery的智能提示、代碼片段、示例文檔編制等內(nèi)容在內(nèi)的功能。微軟和諾基亞公司將長(zhǎng)期成為jQuery的用戶成員,其他成員還有Google,Intel,IBM,Intuit等公司。

2009年1月,jQuery 1.3版發(fā)布,它使用了全新的選擇符引擎Sizzle,在各個(gè)瀏覽器下全面超越其他同類型JavaScript框架的查詢速度,程序庫(kù)的性能也因此有了極大提升。這一版本的第2個(gè)變化就是提供live()方法,使用live()方法可以為當(dāng)前及將來(lái)增加的元素綁定事件,在1.3版之前,如果要為將來(lái)增加的元素綁定事件,需要使用livequery插件,而在1.3版中,可以直接用live()方法?!?005年8月,John Resig提議改進(jìn)Prototype的“Behaviour”庫(kù),于是他在blog上發(fā)表了自己的想法,并用了3個(gè)例子做說(shuō)明。

2010年2月,jQuery 1.4.2版發(fā)布,它新增了有關(guān)事件委托的兩個(gè)方法:delegate()和undelegate()。delegate()用于替代1.3.2中的live()方法。這個(gè)方法比live()來(lái)的方便,而且也可以達(dá)到動(dòng)態(tài)添加事件的作用。比如給表格的每個(gè)td綁定hover事件

特點(diǎn)

1.動(dòng)態(tài)特效

2.AJAX

3.通過(guò)插件來(lái)擴(kuò)展

4.方便的工具 - 例如瀏覽器版本判斷

5.漸進(jìn)增強(qiáng)

6.鏈?zhǔn)秸{(diào)用

7.多瀏覽器支持,支持Internet Explorer6.0+、Opera9.0+、Firefox2+、Safari2.0+、Chrome1.0+(在2.0.0中取消了對(duì)Internet Explorer6,7,8的支持)

歷史 版本

jQuery 1.0

(2006年8月):該庫(kù)的第一個(gè)穩(wěn)定版本,已經(jīng)具有了對(duì)CSS選擇符、事件處理和AJAX交互的穩(wěn)健支持。

jQuery 1.1

(2007年1月):這一版大幅簡(jiǎn)化了API。許多較少使用的方法被合并,減少了需要掌握和解釋的方法數(shù)量。

jQuery 1.1.3

(2007年7月):這次小版本變化包含了對(duì)jQuery選擇符引擎執(zhí)行速度的顯著提升。從這個(gè)版本開(kāi)始,jQuery的性能達(dá)到了Prototype、Mootools以及Dojo等同類JavaScript庫(kù)的水平。

jQuery 1.2

(2007年9月):這一版去掉了對(duì)XPath選擇符的支持,原因是相對(duì)于CSS語(yǔ)法它已經(jīng)變得多余了。這一版能夠支持對(duì)效果的更靈活定制,而且借助新增的命名空間事件,也使插件開(kāi)發(fā)變得更容易。

jQuery UI(2007年9月):這個(gè)新的插件套件是作為曾經(jīng)流行但已過(guò)時(shí)的Interface插件的替代項(xiàng)目而發(fā)布的。jQuery UI中包含大量預(yù)定義好的部件(widget),以及一組用于構(gòu)建高級(jí)元素(例如可拖放的界面元素)的工具。

jQuery 1.2.6

(2008年5月):這一版主要是將Brandon Aaron開(kāi)發(fā)的流行的Dimensions插件的功能移植到了核心庫(kù)中。

jQuery 1.3

(2009年1月):這一版使用了全新的選擇符引擎Sizzle,庫(kù)的性能也因此有了極大提升。這一版正式支持事件委托特性。

jQuery 1.3.2

(2009年2月):這次小版本升級(jí)進(jìn)一步提升了庫(kù)的性能,例如改進(jìn)了:visible/:hidden選擇符、.height()/.width()方法的底層處理機(jī)制。另外,也支持查詢的元素按文檔順序返回。

jQuery 1.4

(2010年1月14號(hào)):對(duì)代碼庫(kù)進(jìn)行了內(nèi)部重寫(xiě)組織,開(kāi)始建立一些風(fēng)格規(guī)范。老的core.js文件被分為attribute.js,css.js,data.js,manipulation.js,traversing.js和queue.js;CSS和attribute的邏輯分離。

重要變化:

1. Ajax重寫(xiě)

Ajax模塊完全進(jìn)行了重寫(xiě)。新增一個(gè)jXHR對(duì)象,為不同瀏覽器內(nèi)置的XMLHttpRequest提供了一致的超集。對(duì)于XMLHttpRequest之外的傳輸機(jī)制,比如JSONP請(qǐng)求,jXHR對(duì)象也可以進(jìn)行處理。(詳情可以參見(jiàn):jQuery.ajax文檔)

此外,系統(tǒng)的可擴(kuò)展性大大增強(qiáng),可以附加各種數(shù)據(jù)處理器、過(guò)濾器和傳輸機(jī)制,為開(kāi)發(fā)新的Ajax插件提供了方便。

2. 延遲對(duì)象

延遲對(duì)象(Deferred Object,jQuery.Deferred對(duì)象)是一個(gè)可鏈接的(chainable)實(shí)用工具對(duì)象,實(shí)現(xiàn)了Promise接口,可以在回調(diào)隊(duì)列中注冊(cè)多個(gè)回調(diào)、調(diào)用回調(diào)隊(duì)列并轉(zhuǎn)發(fā)任何同步/異步函數(shù)的成敗狀態(tài)。正如Using Deferreds in jQuery 1.5一文中說(shuō)明的,其結(jié)果是在jQuery中能夠?qū)⒁蕾囉谀硞€(gè)任務(wù)(事件)結(jié)果的邏輯與任務(wù)本身解耦了。這一點(diǎn)在JavaScript中其實(shí)并不新鮮,Mochikit和Dojo等已經(jīng)實(shí)現(xiàn)有些日子了。由于jQuery 1.5的Ajax模塊內(nèi)置使用了延遲對(duì)象,因此通過(guò)jQuery編寫(xiě)Ajax程序?qū)⒆詣?dòng)獲得這一功能。

開(kāi)發(fā)人員借此可以使用無(wú)法立即獲得的返回值(如異步Ajax請(qǐng)求的返回結(jié)果),而且第一次能夠附加多個(gè)事件處理器。

例如,使用了新的jQuery內(nèi)部Ajax API就可以實(shí)現(xiàn)下面的代碼了:

// Assign handlers immediately after making the request,// and remember the jxhr object for this request var jxhr = $.ajax({ url: "example.php" }) .success(function() { alert("success"); }) .error(function() { alert("error"); }) .complete(function() { alert("complete"); });// perform other work here ... // Set another completion function for the request above jxhr.complete(function(){ alert("second complete"); });

此外,使用jQuery.Deferred還可以開(kāi)發(fā)自己的延遲對(duì)象。更多詳情參見(jiàn):延遲對(duì)象文檔。

3. jQuery.sub()

jQuery 1.5提供了一種創(chuàng)建和修改jQuery副本的方式。可以用來(lái)添加不向外部公開(kāi)的方法,或者對(duì)jQuery的某些方法進(jìn)行重新定義以提供新功能,或者提供更好的封裝、避免名稱空間沖突。當(dāng)然,也可以用來(lái)開(kāi)發(fā)插件,但Resig強(qiáng)烈建議在開(kāi)發(fā)插件之前,先考慮jQuery UI widget工廠。

值得注意的是,sub函數(shù)并不提供真正的隔離,所有方法、數(shù)據(jù)、調(diào)用仍然依靠jQuery本身來(lái)支持。

4. 遍歷性能提高

在新版本中.children(),.prev(),.next()幾個(gè)常用的遍歷函數(shù)性能有了顯著提高。

5. 內(nèi)部開(kāi)發(fā)系統(tǒng)

John Resig還特別提到了jQuery團(tuán)隊(duì)內(nèi)部開(kāi)發(fā)系統(tǒng)的兩點(diǎn)改變:一是服務(wù)器端用Node.js替換了老的Java/Rhino系統(tǒng),使得團(tuán)隊(duì)可以專注于JavaScript環(huán)境的新變化;二是所用的代碼優(yōu)化程序從Google Closure切換到UglifyJS,新工具的壓縮效果非常令人滿意。

使用方法

jQuery可以下載使用,有兩個(gè)版本的 jQuery 可供下載

Production version - 用于實(shí)際的網(wǎng)站中,已被精簡(jiǎn)和壓縮。

Development version - 用于測(cè)試和開(kāi)發(fā)(未壓縮,是可讀的代碼)

jQuery 1.8.0版時(shí)壓縮前后的對(duì)比

插件機(jī)制

jQuery的官方插件是jQuery UI。開(kāi)發(fā)者可以任意擴(kuò)展jQuery的函數(shù)庫(kù)或者按照自己的需求開(kāi)發(fā)UI組件。網(wǎng)上已經(jīng)有數(shù)以萬(wàn)計(jì)的jQuery插件,覆蓋各種各樣的需求。例如Ajax輔助、數(shù)據(jù)表格、動(dòng)態(tài)列表、XML工具、拖曳、cookie處理、彈出層等等。jQuery 的文檔說(shuō)明很全,而且各種應(yīng)用也說(shuō)得很詳細(xì),同時(shí)還有許多成熟的插件可供選擇,例如ComponentOne Studio for ASP NET Wijmo.

隨著jQuery插件在網(wǎng)站建設(shè)過(guò)程中的使用率不斷的增加,所以有必要跟進(jìn)時(shí)代步伐開(kāi)發(fā)出一些新的插件/代碼片段,以此來(lái)鞏固并提高前端用戶體驗(yàn),將用戶體驗(yàn)提升到一個(gè)新的高度。其中包括Flat jQuery Price Slider、Gmaps jQuery Map Plugin 、FormChimp——MailChimp Ajax plugin for jQuery 等。

控件

jQuery Gantt控件是一個(gè)基于原生HTML5/jQuery,功能豐富的控件,該控件真正實(shí)現(xiàn)了跨平臺(tái),在許多設(shè)備和瀏覽器中無(wú)縫的運(yùn)行。

使用項(xiàng)目甘特圖中內(nèi)置的調(diào)度,依賴等功能實(shí)現(xiàn)任務(wù)分層列表的可視化。

使用資源甘特圖實(shí)現(xiàn)一個(gè)資源利用視圖。

使用基于API的jQuery或者基于API的MVC可幫您輕松地安裝甘特圖并加快應(yīng)用速度。

可與諸如KnockOut(KO),jQuery.tmpl等流行的jQuery模式一同使用。

如何創(chuàng)建一個(gè)自定義jquery插件

jQuery 庫(kù)是專為加快 JavaScript 開(kāi)發(fā)速度而設(shè)計(jì)的。通過(guò)簡(jiǎn)化編寫(xiě) JavaScript 的方式,減少代碼量。使用

jQuery 庫(kù)時(shí),您可能會(huì)發(fā)現(xiàn)您經(jīng)常為一些常用函數(shù)重寫(xiě)相同的代碼。如果這樣的話,這可能就是您需要編寫(xiě)自定義 jQuery 插件的一個(gè)原因。

jQuery 插件允許您使用自定義代碼擴(kuò)展 jQuery 庫(kù);您可以對(duì)一些重復(fù)性函數(shù)使用插件。例如,很多插件可供幻燈片、下拉菜單和折疊菜單所用。如果您搜索 jQuery 插件,就會(huì)發(fā)現(xiàn)有大量可用于自己項(xiàng)目的示例(看看它們是如何構(gòu)建的)。

準(zhǔn)備工作

對(duì)JavaScript、jQuery 和CSS有一個(gè)基本了解。(用到的源代碼及示例在本文最下方)

開(kāi)始

jQuery 是一個(gè)可擴(kuò)展 JavaScript 語(yǔ)言的庫(kù)。當(dāng)您創(chuàng)建一個(gè) jQuery 插件時(shí),本質(zhì)上是在擴(kuò)展這個(gè) jQuery

庫(kù)。要真正了解插件如何擴(kuò)展 jQuery 庫(kù)需要對(duì) JavaScript prototype 屬性有一個(gè)基本了解。盡管不直接使用,但是

JavaScript prototype 屬性可通過(guò) jQuery 屬性 fn 在后臺(tái)使用,這是原生 JavaScript prototype

屬性的一個(gè) jQuery 別名。

要使用 fn 屬性創(chuàng)建一個(gè)新 jQuery 插件,只需要為 fn 屬性分配一個(gè)插件名,并將其指向一個(gè)充當(dāng)構(gòu)造函數(shù)的新函數(shù),類似于純

JavaScript。Code 1顯示了如何定義一個(gè)名為 accordion 的新 jQuery 插件,其方法是通過(guò)使用 jQuery 對(duì)象和

fn 屬性,并將其分配給一個(gè)新的構(gòu)造函數(shù)。

Code 1:定義一個(gè)名為 accordion 的新 jQuery 插件

jQuery.fn.accordion = function() {

// 在這里添加插件代碼

};

Code 1 展示了創(chuàng)建 jQuery 插件的一種方法;該示例沒(méi)有什么功能性錯(cuò)誤。但是,創(chuàng)建一個(gè) jQuery

插件所推薦的方法是,先創(chuàng)建一個(gè)允許使用美元符號(hào) ($) 的包裝器函數(shù)。在默認(rèn)情況下,美元符號(hào)可能與其他 JavaScript

框架發(fā)生沖突,如果將插件包裝在一個(gè)函數(shù)中,就不會(huì)出現(xiàn)沖突。Code 2 中的示例代碼顯示如何將一個(gè)包裝器函數(shù)應(yīng)用到一個(gè) jQuery

插件定義中。

(function($) {

$.fn.accordion = function() {

// 在這里添加插件代碼

};

})(jQuery);

在Code 2 中,jQuery 關(guān)鍵字被應(yīng)用到包裝器函數(shù)中,這允許您在插件中使用美元符號(hào),就像使用 fn

屬性時(shí)那樣。包裝器函數(shù)就緒后,就可以在整個(gè)插件的任何地方使用美元符號(hào)代替 jQuery

關(guān)鍵字,不會(huì)干擾其他第三方插件。該選項(xiàng)提供了一種方法使我們可以在開(kāi)發(fā)整個(gè)插件中編寫(xiě)較少的代碼,并且有助于您的插件代碼保持整潔,易于維護(hù)。

維護(hù)鏈接性

jQuery 的一個(gè)優(yōu)勢(shì)是允許您使用任何類型的選擇器。但是,必須記住,您的插件可以處理幾種不同的元素類型。使用 this

關(guān)鍵字允許您的插件應(yīng)用于相關(guān)函數(shù),通過(guò)循環(huán)實(shí)現(xiàn)每個(gè)元素的訪問(wèn),而不考慮元素類型。如果在 each 循環(huán)前使用 return

關(guān)鍵字,就可以使用您的插件維護(hù)鏈接性。清單 3 顯示了分配給一個(gè)函數(shù)處理程序且與 return 關(guān)鍵字相結(jié)合的 each 循環(huán)。

code 3. 在 each 循環(huán)之前使用 return 關(guān)鍵字

(function($) {

$.fn.accordion = function() {

return this.each(function() {

// 使用 return

});

};

})(jQuery);

有了Code 3 的代碼后,示例 accordion 插件可用在一個(gè)方法調(diào)用鏈中。有了鏈接性(另一個(gè)強(qiáng)大的 jQuery

特性),您的插件就可用在一個(gè)方法調(diào)用鏈中。例如,下面的代碼顯示了如何淡出 HTML 元素,并在單一的方法調(diào)用鏈中將其從文檔對(duì)象模型 (DOM)

中刪除。

$("#my-div").fadeOut().remove();

構(gòu)造一個(gè) accordion

一個(gè)典型的層疊設(shè)計(jì)包括標(biāo)題欄和相關(guān)內(nèi)容區(qū)域。定義列表是一個(gè)可供 accordions 使用的很好的 HTML 結(jié)構(gòu);dt 元素供標(biāo)題所用,而dd 元素供內(nèi)容區(qū)域所用。清單 4 中的 HTML 結(jié)構(gòu)是一個(gè)定義列表,含有四個(gè)標(biāo)題以及相應(yīng)的內(nèi)容區(qū)域。

Code 4. 單一方法調(diào)用鏈

dl class="accordion" id="my-accordion"

dt第1部分/dt

dd內(nèi)容一/dd

dt第2部分/dt

dd內(nèi)容二/dd

dt第3部分/dt

dd內(nèi)容三/dd

dt第4部分/dt

dd內(nèi)容四/dd

/dl

Code 4 中定義的列表也有一個(gè)分配給它的名為 accordion 的 CSS 類。沒(méi)有應(yīng)用任何 CSS,這個(gè) accordion 結(jié)構(gòu)看起來(lái)類似于圖 1 中的基礎(chǔ)設(shè)計(jì)

為了美觀,我們?cè)俳oCode 4中的Html美化一下,并命名為“jquery.accordion.css”

Code 5. CSS部分

.accordion {

width: 500px;

border: 1px solid #ccc;

border-bottom: none;

font-family: Arial, Helvetica, sans-serif;

font-size: 12px;

}

.accordion dt,

.accordion dd {

border-bottom: 1px solid #ccc;

margin: 0px;

}

.accordion dt {

background: #eaeaea;

cursor: pointer;

padding: 8px 4px;

font-size: 13px;

font-weight: bold;

}

.accordion dd {

padding: 12px 8px;

}

效果如下圖:

自定義插件

要制作一個(gè)功能性 accordion,必須將自定義代碼應(yīng)用到您上一小節(jié)創(chuàng)建 jQuery 插件的函數(shù)。accordion

插件從遍歷所有已定義的 accordion 開(kāi)始。要定義一個(gè) accordion,在 HTML 文檔或外部嵌入式 JavaScript

文件中使用下列 jQuery。

$('dl#my-accordion').accordion();

對(duì)于每個(gè) Accordion,您可以使用 jQuery 的 children 方法訪問(wèn)相關(guān)定義的標(biāo)題,返回一個(gè)數(shù)組或 dt 元素。應(yīng)用一個(gè)

click 事件到 dt 元素,然后一個(gè)名為 reset 方法應(yīng)用到每個(gè) dt。accordion 首次加載時(shí),該 reset 方法會(huì)折疊所有

dd 元素。單擊 dt 元素或者標(biāo)題欄時(shí),click 事件會(huì)觸發(fā)一個(gè)名為 onClick 的自定義方法。自定義 onClick 方法用于查找

accordion 中的所有 dt 元素。它調(diào)用一個(gè)自定義 hide 方法,該方法通過(guò)使用 next 方法找到緊挨著 dt 元素的 dd

元素,隱藏每個(gè)相關(guān)的 dd 元素,通過(guò)使用 next 方法找到緊挨著 dt 元素的 dd 元素,然后向上滑動(dòng)激活它。

所有 dd 元素被隱藏后,使用 slideDown 方法,就可以看見(jiàn)與單擊過(guò)的 dt 元素相關(guān)的 dd 元素,并創(chuàng)建一個(gè)放大和收縮動(dòng)畫(huà),如清單 8

所示。onClick 方法的最后一行代碼是 return false,確保任何被點(diǎn)擊的主題欄沒(méi)有顯現(xiàn)出其一般行為。例如,如果您使用一個(gè)

anchor 元素作為標(biāo)題欄,您可能想要執(zhí)行 return false,這樣就不會(huì)將用戶定向到另一個(gè)頁(yè)面或現(xiàn)有頁(yè)面的一部分。

Code 6. 自定義用于創(chuàng)建一個(gè) jQuery 插件的 accordion 函數(shù)

(function($) {

$.fn.accordion = function(options) {

return this.each(function() {

var dts = $(this).children('dt');

dts.click(onClick);

dts.each(reset);

});

function onClick() {

$(this).siblings('dt').each(hide);

$(this).next().slideDown('fast');

return false;

}

function hide() {

$(this).next().slideUp('fast');

}

function reset() {

$(this).next().hide();

}

}

})(jQuery);

如果該 accordion 插件與一個(gè) HTML 定義列表結(jié)構(gòu)相關(guān)聯(lián)時(shí),比如您之前創(chuàng)建的那個(gè) accordion 函數(shù)將被應(yīng)用。有了

accordion 函數(shù),單擊一個(gè)標(biāo)題欄或 dt 元素時(shí),會(huì)打開(kāi)其內(nèi)容區(qū)域,而其他內(nèi)容區(qū)域則關(guān)閉。換句話說(shuō),一次只能打開(kāi)一個(gè)內(nèi)容區(qū)域。

設(shè)定插件的默認(rèn)值(Defaults)和設(shè)置項(xiàng)(options)

jQuery 插件可以包括 defaults 和 options。Options 本質(zhì)上就是傳遞給插件的參數(shù)??梢允褂?options

發(fā)送一個(gè)參數(shù)作為 object literal,這是一個(gè)標(biāo)準(zhǔn) jQuery 實(shí)踐,而不需要傳遞多個(gè)參數(shù)。如果您的插件支持 options,使用

defaults 對(duì)象設(shè)置默認(rèn)的 options 將是一個(gè)最佳方式。和 options 一樣,defaults 是一個(gè) object

literal,應(yīng)該包括您想要傳遞到插件中的屬性。

例如,如果您支持一個(gè)可用于在首次加載時(shí)打開(kāi) accordion 第一個(gè)內(nèi)容區(qū)域的屬性,那么在您的插件中應(yīng)該包括一個(gè) open

屬性的默認(rèn)值。在您的插件中使用 defaults 確定默認(rèn)函數(shù),使用 options 覆蓋默認(rèn)值。如果插件接收 options,可以使用

$.extend 方法執(zhí)行覆蓋。jQuery 的 $.extend 方法合并兩個(gè)或多個(gè)對(duì)象。Code 7 中的示例顯示在一個(gè)自定義 jQuery

插件中使用 $.extend 方法合并用戶定義選項(xiàng)和默認(rèn)選項(xiàng)的一般實(shí)現(xiàn)。

Code 7. 向一個(gè)自定義的 accordion jQuery 插件添加 options 和 defaults

(function($) {

$.fn.accordion = function(options) {

var settings = $.extend({}, {open: false}, options);

return this.each(function() {

var dts = $(this).children('dt');

dts.click(onClick);

dts.each(reset);

if(settings.open) $(this).children('dt:first-child').next().show();

});

function onClick() {

$(this).siblings('dt').each(hide);

$(this).next().slideDown('fast');

return false;

}

function hide() {

$(this).next().slideUp('fast');

}

function reset() {

$(this).next().hide();

}

}

})(jQuery);

$.extend 方法參數(shù)是一個(gè)目標(biāo)對(duì)象和 2 個(gè)或多個(gè)合并對(duì)象。在本示例中,目標(biāo)對(duì)象是一個(gè)空 object

literal,充當(dāng)合并對(duì)象容器。目標(biāo)將成為一個(gè)包含合并對(duì)象值的單一對(duì)象(在該案例中是 settings 變量)。第 2

個(gè)參數(shù)是一個(gè)包含默認(rèn)插件屬性的 object literal。第 3 個(gè)參數(shù)是用戶定義的 options 參數(shù)。要在一個(gè) HTML 元素上使用

accordion 插件傳遞 options,需要知道除了之前您作為 object literal 傳遞的屬性外還有哪些屬性,如下所示。

$('dl#my-accordion').accordion({open:true});

在Code 7 示例中,傳遞到插件的 options 通過(guò) $.extend 方法覆蓋 defaults。如果沒(méi)有傳遞 options,則使用默認(rèn)值。對(duì)于示例插件,可使用 open 屬性確定加載時(shí)是否打開(kāi)第一個(gè)內(nèi)容區(qū)域。

可重用性

您可以在任何 HTML 文檔中重用示例 accordion 插件,可以在單個(gè) HTML 文檔中多次使用。您也可以包括多個(gè)

accordion 結(jié)構(gòu),就像已創(chuàng)建的那個(gè) accordion,使用剛創(chuàng)建的新 accordion 插件通過(guò) jQuery 將每個(gè)單獨(dú)定義為

accordion。要向一個(gè) HTML 文檔添加多個(gè) accordion,只需要添加盡可能多的 accordion 結(jié)構(gòu)。Code 8

中的代碼包括兩個(gè) accordion 結(jié)構(gòu),由一個(gè)段落隔開(kāi)。

Code 8. 在同一個(gè) HTML 文檔中使用多個(gè) accordion

dl class="accordion" id="my-accordion"

dt第1部分/dt

dd內(nèi)容一/dd

dt第2部分/dt

dd內(nèi)容二/dd

dt第3部分/dt

dd內(nèi)容三/dd

dt第4部分/dt

dd內(nèi)容四/dd

/dl

dl class="accordion" id="my-accordion"

dt第5部分/dt

dd內(nèi)容五d

dt第6部分/dt

dd內(nèi)容六dd

dt第7部分/dt

dd內(nèi)容七/dd

/dl

Code 8 中的兩個(gè) accordion 結(jié)構(gòu)幾乎一樣,除了內(nèi)容不一樣外,更重要的是 ID 值也不一樣。第一個(gè)結(jié)構(gòu)包含一個(gè)

my-accordion ID 值。第 2 個(gè)結(jié)構(gòu)包含一個(gè) my-accordion2 ID 值?,F(xiàn)在可以單獨(dú)定向這些結(jié)構(gòu)。例如,下列

jQuery 腳本使用已創(chuàng)建的新插件將每個(gè) accordion 結(jié)構(gòu)定義為一個(gè) accordion。

$('dl#my-accordion').accordion({open:true});

$('dl#my-accordion2').accordion({open:true});

兩個(gè) accordion 結(jié)構(gòu)定義完成后,第一個(gè)面板默認(rèn)設(shè)置為打開(kāi)下圖 顯示一個(gè)用在同一個(gè) HTML 文檔的多個(gè) accordion 插件的示例。

如何編寫(xiě)jquery插件

編寫(xiě)插件的目的是給已經(jīng)有的一系列方法或函數(shù)做一個(gè)封裝,以便在其他地方重復(fù)使用,提高開(kāi)發(fā)效率和方便后期維護(hù)。本文將詳細(xì)介紹如何編寫(xiě)jQuery插件

類型

jQuery的插件主要分為3種類型

1、封裝對(duì)象方法

這種插件是將對(duì)象方法封裝起來(lái),用于對(duì)通過(guò)選擇器獲取的jQuery對(duì)象進(jìn)行操作,是最常見(jiàn)的一種插件。此類插件可以發(fā)揮出jQuery選擇器的強(qiáng)大優(yōu)勢(shì),有相當(dāng)一部分的jQuery的方法,都是在jQuery腳本庫(kù)內(nèi)部通過(guò)這種形式“插”在內(nèi)核上的,例如:parent()方法、appendTo()方法等。這些方法在現(xiàn)在來(lái)看都是jQuery本身自帶的方法了。平時(shí),我們是可以直接拿來(lái)就用的,只需引入jQuery庫(kù)就行

2、封裝全局函數(shù)

可以將獨(dú)立的函數(shù)加到j(luò)Query命名空間下,如常用的jQuery.ajax()、去首尾空格的jQuery.trim()方法等,都是jQuery內(nèi)部作為全局函數(shù)的插件附加到內(nèi)核上去的

3、選擇器插件

雖然jQuery的選擇器十分強(qiáng)大,但是在少數(shù)情況下,還是會(huì)需要用到選擇器插件來(lái)擴(kuò)充一些自己喜歡的選擇器

要點(diǎn)

1、jQuery插件的文件名推薦命名為jQuery.[插件名].js,以免和其他JS庫(kù)插件混淆

2、所有的對(duì)象方法都應(yīng)當(dāng)附加到j(luò)Query.fn對(duì)象上,而所有的全局函數(shù)都應(yīng)當(dāng)附加到j(luò)Query對(duì)象本身上

3、在插件內(nèi)部的this指向的是當(dāng)前通過(guò)選擇器獲取的jQuery對(duì)象,而不像一般方法那樣,如click,內(nèi)部的this指向的是DOM元素

4、可以通過(guò)this.each來(lái)遍歷所有的元素

5、所有的方法或函數(shù)插件,都應(yīng)當(dāng)以分號(hào)結(jié)尾。否則壓縮的時(shí)候可能出現(xiàn)問(wèn)題。為了穩(wěn)妥些,甚至可以在插件頭部先加上一個(gè)分號(hào),以免他人不規(guī)范的代碼影響自身的插件代碼

6、插件應(yīng)該返回一個(gè)jQuery對(duì)象,以保證插件的可鏈?zhǔn)讲僮?/p>

7、避免在插件內(nèi)部使用$作為jQuery對(duì)象的別名,而應(yīng)使用完整的jQuery來(lái)表示,避免沖突。當(dāng)然,也可以利用閉包來(lái)回避這種問(wèn)題,使插件內(nèi)部繼續(xù)使用$作為jQuery的別名

閉包

利用閉包的特性,即可以避免內(nèi)部臨時(shí)變量影響全局空間,又可以在插件內(nèi)容繼續(xù)使用$作為jQuery的別名。常見(jiàn)的jQuery插件都是以下這種形式的:

(function(){

/*這里放置代碼*/

})();

首先定義一個(gè)匿名函數(shù)function(){/*這里放置代碼*/},然后用括號(hào)括起來(lái),變成(function(){/*這里放置代碼*/})這種形式,最后通過(guò)()這個(gè)運(yùn)算符來(lái)執(zhí)行??梢詡鬟f參數(shù)進(jìn)行,以供內(nèi)部函數(shù)使用

//為了更好的兼容性,開(kāi)始前有個(gè)分號(hào)

;(function($){??? //此處將$作為匿名函數(shù)的形參

/*這里放置代碼,可以使用$作為jQuery的縮寫(xiě)別名*/

})(jQuery);????? //這里就將jQuery作為實(shí)參傳遞給匿名函數(shù)了

上面的代碼是一種常見(jiàn)的jQuery插件的結(jié)構(gòu)

插件機(jī)制

jQuery提供了兩個(gè)用于拓展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。jQuery.fn.extend()方法用于拓展封裝對(duì)象方法的插件,jQuery.extend()方法用于拓展封裝全局函數(shù)的插件和選擇器插件。這兩個(gè)方法都接受一個(gè)參數(shù),類型為Object。Object對(duì)象的"名/值對(duì)"分別代表"函數(shù)或方法名/函數(shù)主體"

【jQuery.fn.extend()】

jQuery.fn.extend()方法用于將一個(gè)對(duì)象的內(nèi)容合并到j(luò)Query的原型,以提供新的jQuery實(shí)例方法

labelinput type="checkbox" name="foo" Foo/label

labelinput type="checkbox" name="bar" Bar/label

button id="btn1"全選/button

button id="btn2"全不選/button

script

jQuery.fn.extend({

check: function() {

return this.each(function() { this.checked = true; });

},

uncheck: function() {

return this.each(function() { this.checked = false; });

}

});

$('#btn1').click(function(){

$( "input[type='checkbox']" ).check();

});

$('#btn2').click(function(){

$( "input[type='checkbox']" ).uncheck();

});

/script

【jQuery.extend()】

jQuery.extend()方法用一個(gè)或多個(gè)其他對(duì)象來(lái)擴(kuò)展一個(gè)對(duì)象,然后返回被擴(kuò)展的對(duì)象

jQuery.extend( target [, object1 ] [, objectN ] )

例如,合并settings對(duì)象和options對(duì)象,修改并返回settings對(duì)象

var settings = {validate:false,limit:5,name:"foo"};

var options = {validate:true,name:"bar"};

var newOptions = jQuery.extend(settings,options);

console.log(newOptions);//Object {validate: true, limit: 5, name: "bar"}

jQuery.extend()方法經(jīng)常被用于設(shè)置插件方法的一系列默認(rèn)參數(shù)

function foo(options){

options=jQuery.extend({

name:"bar",

length:5,

dataType:"xml"

},options);

如果用戶調(diào)用foo()方法的時(shí)候,在傳遞的參數(shù)options對(duì)象設(shè)置了相應(yīng)的值,那么就使用設(shè)置的值,否則使用默認(rèn)值

通過(guò)使用jQuery.extend()方法,可以很方便地用傳入的參數(shù)來(lái)覆蓋默認(rèn)值。此時(shí),對(duì)方法的調(diào)用依舊保持一致,只不過(guò)要傳入的是一個(gè)映射而不是一個(gè)參數(shù)列表。這種機(jī)制比傳統(tǒng)的每個(gè)參數(shù)都去檢測(cè)的方式不僅靈活而且更加簡(jiǎn)潔。此外使用命名參數(shù)意味著再添加新選項(xiàng)也不會(huì)影響過(guò)去編寫(xiě)的代碼,從而使開(kāi)發(fā)者使用起來(lái)更加直觀明了

jquery插件開(kāi)發(fā)有幾種

//類級(jí)別插件開(kāi)發(fā),主要是在jQuery中定義全局方法:

//第一種寫(xiě)法

jQuery.myFunc = function(str){

alert("直接在jquery中定義方法",str)

}

//調(diào)用方式 $.myFunc("hello!");

//第二種寫(xiě)法

jQuery.extend({

myFunc:function(str){

alert("extend擴(kuò)展$的方法",str)

}

})

//調(diào)用方式 $.myFunc("hello!");

//第三種寫(xiě)法: 為了不污染全局,掛載一個(gè)對(duì)象作為命名空間,自定義的所有方法放在這里,保證jQuery全局安全。

jQuery.define={

myFunc:function(str){

alert("命名空間的寫(xiě)法",str)

}

}

//調(diào)用方式:$.define.myFunc("hello");

//以上三種是級(jí)別插件開(kāi)發(fā)方式,不常用,從調(diào)用方式看出,他們是全局執(zhí)行的,不需要綁定節(jié)點(diǎn)對(duì)象。

//對(duì)象級(jí)別插件開(kāi)發(fā):有規(guī)范模板

;(function($){

$.fn.plugin = function(options){

var defaults = {

//各種默認(rèn)參數(shù)

}

var options = $.extend(defaults,options); //傳入的參數(shù)覆蓋默認(rèn)參數(shù)

this.each(function(){

var _this = $(this); //緩存一下插件傳進(jìn)來(lái)的節(jié)點(diǎn)對(duì)象。

//執(zhí)行內(nèi)容

})

return $(this); //把節(jié)點(diǎn)對(duì)象返回去,為了支持鏈?zhǔn)秸{(diào)用。

}

})(jQuery);

//調(diào)用方式

$("selector").plugin({

//自定義參數(shù),json格式

})

什么是jquery插件?有什么用?

jquery 插件就是一些人用jquery寫(xiě)的一些工具,常見(jiàn)的是jquery UI和jquery easyui,我們?cè)谡{(diào)用時(shí)只需要用很少的代碼就能實(shí)現(xiàn)很好的效果。

如easyui的datagrid、combobox、tree等可以實(shí)現(xiàn)表格、下拉框、樹(shù)等形狀及需要的操作。

附:easyui官網(wǎng)

可以在網(wǎng)站里面下載demo、觀看一些特效、下載插件js等。

jQuery插件開(kāi)發(fā)全解析 jQuery插件的開(kāi)發(fā)包括兩種:

一種是類級(jí)別的插件開(kāi)發(fā),即給jQuery添加新的全局函數(shù),相當(dāng)于給jQuery類本身添加方法。jQuery 的全局函數(shù)就是屬于jQuery命名空間的函數(shù)。

另一種是對(duì)象級(jí)別的插件開(kāi)發(fā),即給jQuery對(duì)象添加方法。


當(dāng)前名稱:jquery插件開(kāi)發(fā),jquery擁有成熟插件
鏈接URL:http://weahome.cn/article/dsedecd.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部