溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

JQuery自定義插件開(kāi)發(fā)(二)

發(fā)布時(shí)間:2020-06-26 12:54:53 來(lái)源:網(wǎng)絡(luò) 閱讀:402 作者:owandering 欄目:web開(kāi)發(fā)

JQuery全局函數(shù)定義

   下面為JQuery定義一個(gè)全局函數(shù)globalfunction用于彈出一個(gè)對(duì)話框:
 

  1. jQuery.globalfunction=function(){  
  2.    alert("myplugin");  

    在頁(yè)面上我們可以通過(guò)$.glabalfunction來(lái)調(diào)用
    JQuery還允許我們同時(shí)定義多個(gè)全局函數(shù),這可以通過(guò)JQuery的extend方法或者通過(guò)擴(kuò)展JQuery全局對(duì)象的方式來(lái)實(shí)現(xiàn)。由于使用extend方法有可能會(huì)出現(xiàn)函數(shù)重名的問(wèn)題,這里以擴(kuò)展全局對(duì)象為例:
    下面為JQuery擴(kuò)展全局對(duì)象myPlugin,在myPlugin中定義兩個(gè)函數(shù)
 

  1. jQuery.myPlugin={  
  2.   functionOne:function(){  
  3.     alert("functionOne");  
  4.   },  
  5.   functionTwo:function(param){  
  6.     alert("functionTwo and param"+param);  
  7.   }  

     在頁(yè)面上我們可以通過(guò)$.myPlugin.functionOne()來(lái)調(diào)用函數(shù)1,
     通過(guò)$.myPlugin.functionTwo(param)來(lái)調(diào)用函數(shù)2

JQuery對(duì)象函數(shù)定義

     JQuery對(duì)象函數(shù)的強(qiáng)大在于在JQuery插件方法的內(nèi)部,this引用的都是當(dāng)前的JQuery對(duì)象,因而可以在this上面調(diào)用任何內(nèi)置的JQuery方法,或者提取它包含的DOM節(jié)點(diǎn)并操作該節(jié)點(diǎn)。
    通過(guò)上一篇日志我們知道JQuery實(shí)例對(duì)象繼承的是JQuery對(duì)象的原型,因此擴(kuò)展JQuery對(duì)象函數(shù)需要在JQuery.fn上進(jìn)行操作。下面我們?yōu)镴Query實(shí)例對(duì)象添加方法myMethod彈出對(duì)話框。

  1. jQuery.fn.myMethod=function(){  
  2.     alert("myMethod");  
 

    我們可以通過(guò)$("#id").myMethod來(lái)進(jìn)行調(diào)用。
    下面演示在JQuery對(duì)象函數(shù)內(nèi)部this的作用。首先在頁(yè)面上我們添加如下組件:

  1. <form name=fm> 
  2.            <ul> 
  3.               <li class="this">標(biāo)題</li> 
  4.               <li class="that">樣式1</li> 
  5.               <li class="this">樣式2</li> 
  6.             </ul> 
  7.             <input type="button" value="改變樣式" id="swapClass"/> 
  8.     </form> 

    添加樣式

  1. .this{  
  2.      font-stylenormal;  
  3.    }  
  4.    .that{  
  5.      font-styleitalic;  
  6.    }   

    我們需要的效果是點(diǎn)擊改變樣式后將使用this樣式的元素樣式改為that,使用that樣式的元素樣式改為this。
    現(xiàn)在我們通過(guò)添加JQuery對(duì)象函數(shù)來(lái)實(shí)現(xiàn)
    添加JQuery對(duì)象函數(shù)

  1. jQuery.fn.swapClass=function(class1,class2){  
  2.     this.each(  
  3.        function(){  
  4.         var $element=jQuery(this)       
  5.         if($element.hasClass(class1)){  
  6.             $element.removeClass(class1).addClass(class2);  
  7.         }else if($element.hasClass(class2)){  
  8.             $element.removeClass(class2).addClass(class1);  
  9.         }  
  10.      });      

   為按鈕綁定此方法

  1. <script type="text/javascript">  
  2.             window.onload=function(){  
  3.                 $("#swapClass").click(function(){  
  4.                    $("li").swapClass("this","that");  
  5.                 });   
  6.                 showBox();   
  7.              }   
  8.     </script>    

   這樣就可以實(shí)現(xiàn)此效果了。
   需要注意的是在定義插件的方法中this的運(yùn)用,this.each中的this為實(shí)例化的JQuery對(duì)象,在此處即為所有的"li"標(biāo)簽,而在每一次this.each方法體中的this則是一個(gè)DOM元素。

   在網(wǎng)上我們經(jīng)常能夠看到這樣的定義JQuery對(duì)象函數(shù)的方法:

  1. (function($) {  
  2.     $.fn.myPluginName = function() {  
  3.         // your plugin logic  
  4.     };  
  5. })(jQuery); 

  通過(guò)這種方式在自定義插件方法內(nèi)部可以使用$關(guān)鍵字來(lái)代替JQuery關(guān)鍵字。那么這種寫(xiě)法會(huì)不會(huì)有人覺(jué)得比較陌生呢,下篇日志將插入一段題外話介紹一下JavaScript的匿名函數(shù)和閉包。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI