首頁 後端開發 php教程 jQuery插件有哪些? jQuery插件的寫法分享

jQuery插件有哪些? jQuery插件的寫法分享

Jul 21, 2018 pm 02:00 PM
jquery插件

jQuery外掛是什麼?常見的的jQuery插件主要分為三種:封裝物件方法的插件;封裝全域函數的插件;選擇器插件。那麼基於這三個jQuery插件之下的各個jQuery插件的編寫及使用又是怎樣的呢?接下來我們就來談談關於jQuery外掛的使用和寫法。

jQuery外掛分類:

1.封裝物件方法的外掛程式

   這種外掛程式是將物件方法封裝起來,用於對透過選擇器取得的jQuery物件進行操作,是最常見的一種插件。

2.封裝全域函數的外掛程式

   可以將獨立的函數加到jQuery命名空間之下。例如jQuery.noConflict()方法、常用的jQuery.ajax()方法以及去除首位空格的jQuery.trim()方法等,都是jQuery內部作為全局函數的插件附加到內核上去的。

3.選擇器外掛程式

   個別情況下,會需要使用到選擇器插件。

外掛程式的基本要點

1.jQuery外掛程式的檔案名稱推薦命名為jquery.[外掛名稱].js,以免和其他JavaScript庫外掛程式混淆。

2.所有的物件方法都應該附加到jQuery.fn物件上,而所有的全域函數都應附加到jQuery物件本身上。

3.在插件內部,this指向的是當前透過選擇器取得的jQuery對象,而不像一般方法那樣,例如click()方法,內部的this指向的DOM元素。

4.可以透過this.each來遍歷所有元素。

5.所有的方法或函數插件,都應以分號結尾,否則壓縮的時候可能會出現問題。為了更穩妥些,甚至可以在插件頭部先加上一個分號,以免他人的不規範代碼給插件帶來影響。

6.外掛程式應該傳回一個jQuery對象,以確保外掛程式的可鍊式操作。除非插件需要傳回的是一些需要取得的量,例如字串或陣列等。

7.避免在外掛內部使用$作為jQuery物件的別名,而應使用完整的jQuery來表示。這樣可以避免衝突,當然,也可以利用閉包這種技巧來迴避這個問題,讓外掛內部繼續使用$作為jQuery的別名。很多插件都是這樣做的。

外掛程式中的閉包

   關於閉包,ECMAScript對其進行了簡單的描述:允許使用內部函數(即函數定義和函數表達式位於另一個函數體內),而且,這些內部函數可以存取它們所在的外部函數中聲明的所有局部變數、參數和聲明的其他內部函數,當其中一個這樣的內部函數在包含它們的外部函數之外被呼叫時,就會形成閉包。即內部函數會在外部函數返回後被執行。而這個內部函數執行時,它仍然必須存取其外部函數的局部變數、參數以及其他內部函數。這些局部變數、參數和函數宣告(最初時)的值是外部函數傳回時的值,但也會收到內部函數的影響。

   先定義一個匿名函數function(){/*這裡放置程式碼*/},然後用括號括起來,變成(function(){/*這裡放置程式碼*/})這個形式,最後透過()這個運算子來執行。可以傳遞參數進去,以供內部函數使用。

//注意為了更好的兼容性,開始之前還有一個分號:

;(function($){ //开始时将$作为匿名函数的形参
 
/*这里放置代码,可以使用$作为jQuery的缩写别名*/
 
})(jQuery); //这里就将jQuery作为实参传递给匿名函数了

以上是一種常見的jQuery插件的結構。

jQuery外掛程式的機制

   jQuery提供了兩種用於擴展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。前者用於之前提到的3種插件類型中的第1種,後者用於擴展後兩種插件。這兩個方法都接受一個參數,類型為Object。 Object物件的「名稱/值對」分別代表「函數或方法名稱/函數主體」。

   jQuery.extend()方法除了可以用來擴充jQuery物件之外,還有一個強大的功能,就是用與擴充已有的Object物件。

jQuery程式碼如下:

jQuery.extend(target,obj1,…….[objN])
 
   用一个或多个其它对象来扩展一个对象,然后返回被扩展的对象。
   例如合并settings对象和options对象,修改并返回settings对象。
 
 
var settings={validate:false,limit:5,name:”foo”};
 
var options={validate:true,name:”bar”};
 
var newOptions=jQuery.extend(settings,options);

結果為:

newOptins={valitdate:true,limit:5,name:”bar”};

jQuery.extend()方法經常被用於設定插件方法的一系列預設參數,如下面的程式碼所示:

function foo(options){
 
options=jQuery.extend({
 
name:”bar”,
 
limit:5,
 
datatype:”xml”
 
},options);
 
};

如果呼叫foo()方法的時候,在傳遞的參數options物件中設定了對應的值,那麼就使用設定的值,否則就用預設的值。程式碼如下:

foo({name:”a”,length:”4”,dataType:”json”});
 
foo({name:”a”,length:”4”});
 
foo({name:”a”});
 
foo();

   透過使用jQuery.extend()方法,可以很方便地用傳入的參數來覆寫預設值。此時,對方法的呼叫依舊保持一致,只不過要傳入的是一個映射而不是一個參數列表。這種機制比傳統的每個參數都去檢測的方式不僅靈活而且更簡潔。此外使用命名參數意味著再添加新選項也不會影響過去編寫的程式碼,從而使開發者使用起來更加直觀明了。

寫jQuery外掛

1.封裝jQuery物件方法的外掛程式

寫設定取得顏色的外掛程式

首先介紹如何編寫一個color()插件。該插件用於實現以下兩個功能。

(1)设置匹配元素的颜色。

(2)获取匹配的元素(元素集合中的第1个)的颜色。

首先将该插件按规范命名为jquery.color.js。

然后再JavaScript文件里搭好框架.由于是对jQuery对象的方法扩展,因此采用第1类方法jQuery.fn.extend()来编写。

 ;(function($){
 
$.fn.extend({
 
“color”:function(value){
 
//这里写插件代码
 
}
 
});
 
})(jQuery);

这里给这个方法提供一个参数value,如果调用了方法的时候传递了value这个参数,那么就是用这个值来设置字体颜色;否则就是匹配元素的字体颜色的值。

首先,实现第1个功能,设置字体颜色。注意,由于插件内部的this指向的是jQuery对象,而非普通的DOM对象。代码如下:

;(function($){
 
$.fn.extend({
 
“color”:function(value){
 
return this.css(“color”,value);
 
}
 
});
 
})(jQuery);

接下来实现第2个功能。如果没用给方法传递参数,那么就是获取集合对象中第1个对象的color的值。由于css()方法本身就具有返回第1个匹配元素样式值的功能,因此此处无需通过eq()来获取第1个元素。只要这两个方法结合起来,判断一下value的值是否是undefined即可。

jQuery代码如下:

;(function($){
 
$.fn.extend({
 
“color”:function(value){
 
if(color===undefined){
 
return this.css(“color”,value);
 
}else{
 
Return this.css(“color”,value);
 
}
 
}
 
});
 
})(jQuery);

这样一来,插件也就完成了。现在来测试一下代码。

<script type=”text/javascript”>
 
//插件编写
 
;(function($){
 
$.fn.extend({
 
“color”:function(value){
 
if(color===undefined){
 
return this.css(“color”,value);
 
}else{
 
Return this.css(“color”,value);
 
}
 
}
 
});
 
})(jQuery);
 
 
 
//插件应用
 
$(function(){
 
//查看第一个div的color样式值
 
alert($(“div”).color()+”\n返回字符串,证明此插件可用。”);
 
//把所有的div字体颜色都设为红色
 
alert($(“div”).color(“red”)+”\n返回object证明得到的是jQuery对象。“);
 
})
 
</script>
 
<div style=”color:red”>red</div>
 
<div style=”color:blue”>blue</div>
 
<div style=”color:green”>green</div>
 
<div style=”color:yellow”>yellow</div>
    另外,如果要定义一组插件,可以使用如下所示的写法:
 
:(function($){
 
$.fn.extend({
 
"color":function(value){
 
//插件代码
 
},
 
"border":function(value){
 
//插件代码
 
},
 
"background":function(value){
 
//插件代码
 
}
 
};
 
})(jQuery);

表格隔行变色插件

表格隔行变色的代码如下:

$("tbody>tr:odd").addClass("odd");
 
$("tbody>tr:even").addClass("even");
 
$(&#39;tbody>tr&#39;).click(function(){
 
//判断是否选中
 
var hasSelected=$(this).hasClass(&#39;selected&#39;);
 
//如果选中,则移出selected类,否则就加上selected类
 
$(this)[hasSelected?"removeClass":"addClass"](&#39;selected&#39;)
 
//查找内部的checkbox,设置对应的属性
 
.find(&#39;checkbox&#39;).attr(&#39;checked&#39;.!hasSelected);
 
});
 
 
 
//如果复选框默认情况下是选择的,则高色
 
$(&#39;tbody>tr:has(:checked)&#39;).addClass(&#39;selected&#39;);

首先把插件方法取名为alterBgColor,然后为该插件方法搭好框架,jQuery代码如下:

;(function($){
 
$.fn.extend({
 
"alterBgColor":function(options){
 
//插件代码
 
}
 
});
 
})(jQuery);

框架完成后,接下来就需要为options定义默认值。默认构建这样({odd:"odd",even:"even",selected:"selected"})一个Object。这样就可以通过$("#sometable").alterBgColor({odd:"odd",even:"even",selected:"selected"})自定义奇偶行的样式类名以及选中后的样式类名。同时,直接使用$("#sometable").alterBgColor()就可以应用 默认的样式类名。

jQuery代码如下:

;(function($){
 
$.fn.extend({
 
"alterBgColor":function(options){
 
options=$.extend({
 
odd:"odd", /*偶数行样式*/
 
even:"even", /*奇数行样式*/
 
selected:"selected" /*选中行样式*/
 
},options);
 
}
 
});
 
})(jQuery);

如果在后面的程序中需要使用options对象的属性,可以使用如下的方式来获得:

options.odd; //获取options对象中odd属性的值
 
options.even; //获取options对象中even属性的值
 
options.selected; //获取options对象中selected属性的值

接下来就需要把这些值放到程序中,来代替先前程序中的固定值。

最后就是匹配元素的问题了。显然不能直接用$('tbody>tr')选择表格行,这样会使页面中全部的元素都隔行变色。应该使用选择器选中某个表格,执行alterBgColor()方法后,将对应的表格内元素进行隔行变色。因此,需要把所有通过$('tbody>tr')选择的对象改写成$('tbody>tr',this),表示在匹配的元素内(当前表格内)查找,并应用上一步中的默认值。jQuery代码如下:

;(function($){
 
$.fn.extend({
 
"alterBgColor":function(options){
 
//设置默认值
 
options=$.extend({
 
odd."odd",
 
even."even",
 
selected:"selected"
 
},options);
 
$("tbody>tr:odd",this).addClass(options,odd);
 
$("tbody>tr:even",this).addClass(options,even);
 
$("tbody>tr",this).click(function(){
 
//判断是否选中
 
var hasSelected=$(this).hasClass(options,selected);
 
//如果选中,则移出selected类,否则加上selected类
 
$(this)[hasSelected?"removeClass":"addClass"](options,selected)
 
//查找内部的checkbox,设置对应属性
 
.find(&#39;:checkbox&#39;).attr(&#39;checked&#39;,!hasSelected);
 
});
 
//如果单选框默认情况下是选择的,则高色
 
$(&#39;tbody>tr:has(:checkd),this&#39;).addClass(options,selected);
 
rerturn this; //返回this,使方法可链
 
}
 
});
 
})(jQuery);

在代码的最后,返回this,让这个插件具有可链性。
此时,插件就完成了。现在来测试这个插件。构造两个表格,id分别为table1和table2,然后使用其中一个

调用alterBgColor()方法,以便查看是否能独立工作,并且具有可链性。
jQuery代码如下:

$(&#39;#table2&#39;)
.alterBgColor() //应用插件
 
.find("th").css("color","red"); //可链式操作

需要注意的是,jQuery的选择符可能会匹配1个或者多个元素。因此,在编写插件时必须考虑到这些情况。可以在插件内部调用each()方法来遍历匹配元素,然后执行相应的方法,this会依次引用每个DOM元素。如下jQuery代码所示:

 ;(function($)){
 
$.fn.extend({
 
"SomePlugin":function(options){
 
return this.each(function(){
 
//这里置放代码
 
});
 
}
 
});
 
})(jQuery);

相关推荐:

jQuery简单滚动插件

jquery.tmpl JQuery模板插件_jquery

以上是jQuery插件有哪些? jQuery插件的寫法分享的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

如何設置PHP時區? 如何設置PHP時區? Jun 25, 2025 am 01:00 AM

tosetTherightTimeZoneInphp,restate_default_timezone_set()functionAtthestArtofyourscriptWithavalIdidentIdentifiersuchas'america/new_york'.1.usedate_default_default_timezone_set_set()

編寫清潔和可維護的PHP代碼的最佳實踐是什麼? 編寫清潔和可維護的PHP代碼的最佳實踐是什麼? Jun 24, 2025 am 12:53 AM

寫乾淨、易維護的PHP代碼關鍵在於清晰命名、遵循標準、合理結構、善用註釋和可測試性。 1.使用明確的變量、函數和類名,如$userData和calculateTotalPrice();2.遵循PSR-12標準統一代碼風格;3.按職責拆分代碼結構,使用MVC或Laravel式目錄組織;4.避免麵條式代碼,將邏輯拆分為單一職責的小函數;5.在關鍵處添加註釋並撰寫接口文檔,明確參數、返回值和異常;6.提高可測試性,採用依賴注入、減少全局狀態和靜態方法。這些做法提升代碼質量、協作效率和後期維護便利性。

如何使用PHP執行SQL查詢? 如何使用PHP執行SQL查詢? Jun 24, 2025 am 12:54 AM

Yes,youcanrunSQLqueriesusingPHP,andtheprocessinvolveschoosingadatabaseextension,connectingtothedatabase,executingqueriessafely,andclosingconnectionswhendone.Todothis,firstchoosebetweenMySQLiorPDO,withPDObeingmoreflexibleduetosupportingmultipledatabas

如何快速測試PHP代碼片段? 如何快速測試PHP代碼片段? Jun 25, 2025 am 12:58 AM

toquicklytestaphpcodesnippet,useanonlinephpsandboxlike3v4l.orgorphpize.onlineforinstantantantExecutionWithOutSetup; runco​​​​delocalocallocallocallocallocallocallywithpplibycreatinga.phpfileandexecutingitviateringitviatheterminal;

如何在PHP中使用頁面緩存? 如何在PHP中使用頁面緩存? Jun 24, 2025 am 12:50 AM

PHP頁面緩存可通過減少服務器負載和加快頁面加載速度提升網站性能。 1.基本文件緩存通過生成靜態HTML文件並在有效期內提供服務,避免重複生成動態內容;2.啟用OPcache可將PHP腳本編譯為字節碼存儲在內存中,提升執行效率;3.對帶參數的動態頁面,應根據URL參數分別緩存,並避免緩存用戶特定內容;4.可使用輕量級緩存庫如PHPFastCache簡化開發並支持多種存儲驅動。結合這些方法能有效優化PHP項目的緩存策略。

如何升級PHP版本? 如何升級PHP版本? Jun 27, 2025 am 02:14 AM

升級PHP版本其實不難,但關鍵在於操作步驟和注意事項。以下是具體方法:1.確認當前PHP版本及運行環境,使用命令行或phpinfo.php文件查看;2.選擇適合的新版本並安裝,推薦8.2或8.1,Linux用戶用包管理器安裝,macOS用戶用Homebrew;3.遷移配置文件和擴展,更新php.ini並安裝必要擴展;4.測試網站是否正常運行,檢查錯誤日誌確保無兼容性問題。按照這些步驟操作,大多數情況都能順利完成升級。

PHP初學者指南:當地環境配置的詳細說明 PHP初學者指南:當地環境配置的詳細說明 Jun 27, 2025 am 02:09 AM

要設置PHP開發環境,需選擇合適的工具並正確安裝配置。 ①最基礎的PHP本地環境需要三個組件:Web服務器(Apache或Nginx)、PHP本身和數據庫(如MySQL/MariaDB);②推薦初學者使用集成包如XAMPP或MAMP,它們簡化了安裝流程,XAMPP適用於Windows和macOS,安裝後將項目文件放入htdocs目錄並通過localhost訪問;③MAMP適合Mac用戶,支持便捷切換PHP版本,但免費版功能有限;④高級用戶可用Homebrew手動安裝,在macOS/Linux系統中

在Linux上配置PHP開發環境的步驟 在Linux上配置PHP開發環境的步驟 Jun 30, 2025 am 01:57 AM

TosetupaPHPdevelopmentenvironmentonLinux,installPHPandrequiredextensions,setupawebserverlikeApacheorNginx,testwithaPHPfile,andoptionallyinstallMySQLandComposer.1.InstallPHPandextensionsviapackagemanager(e.g.,sudoaptinstallphpphp-mysqlphp-curlphp-mbst

See all articles