在jquery中,插件開發常見的有: 一種是為$函數本身擴展一個方法,這種是靜態擴展(也叫類擴展),這種插件一般是工具方法, 還有一種是擴展在原型對象$.fn上面的,開發出來的插件是用在dom元素上面的 一、類級別的擴展 註意要提前引入jquery庫, 上例在$函數上面添加了一個方法showMsg, ...
在jquery中,插件開發常見的有:
一種是為$函數本身擴展一個方法,這種是靜態擴展(也叫類擴展),這種插件一般是工具方法,
還有一種是擴展在原型對象$.fn上面的,開發出來的插件是用在dom元素上面的
一、類級別的擴展
1 $.showMsg = function(){ 2 alert('hello,welcome to study jquery plugin dev'); 3 } 4 // $.showMsg();
註意要提前引入jquery庫, 上例在$函數上面添加了一個方法showMsg,那麼就可以用$.showMsg()調用了
1 $.showName = function(){ 2 console.log( 'ghostwu' ); 3 } 4 $.showName();
這種插件比較少見,一般都是用來開發工具方法,如jquery中的$.trim, $.isArray()等等
二、把功能擴展在$.fn上,
這種插件就是用在元素上,比如,我擴展一個功能,點擊按鈕,顯示當前按鈕的值
$.fn.showValue = function(){ return $(this).val(); } $(function(){ $("input").click(function(){ // alert($(this).showMsg()); alert($(this).showMsg()); }); }); <input type="button" value="點我">
在$.fn上添加一個showValue方法, 返回當前元素的value值. 在獲取到頁面input元素,綁定事件之後,就可以調用這個方法,顯示按鈕的值 "點我",在實際插件開發中,常用的就是這種.接下來,我們就用這種擴展機制開發一個簡單的選項卡插件:
頁面佈局與樣式:
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="width=device-width, initial-scale=1.0"> 6 <meta http-equiv="X-UA-Compatible" content="ie=edge"> 7 <title>Document</title> 8 <script src="https://cdn.bootcss.com/jquery/1.12.0/jquery.js"></script> 9 <style> 10 #tab { 11 width:400px; 12 height:30px; 13 } 14 #tab li, #tab ul { 15 list-style-type:none; 16 } 17 #tab ul { 18 width:400px; 19 height: 30px; 20 border-bottom:1px solid #ccc; 21 line-height: 30px; 22 } 23 #tab ul li { 24 float:left; 25 margin-left: 20px; 26 padding:0px 10px; 27 } 28 #tab ul li.active { 29 background: yellow; 30 } 31 #tab ul li a { 32 text-decoration: none; 33 color:#666; 34 } 35 #tab div { 36 width:400px; 37 height:350px; 38 background-color:#ccc; 39 } 40 .clearfix:after{ 41 content: ''; 42 display: block; 43 clear: both; 44 height: 0; 45 visibility: hidden; 46 } 47 </style> 48 <script src="tab2.js"></script> 49 <script> 50 $(function(){ 51 $("#tab").tabs( { evType : 'mouseover' } ); 52 }); 53 </script> 54 </head> 55 <body> 56 <div id="tab"> 57 <ul class="clearfix"> 58 <li><a href="#tab1">選項1</a></li> 59 <li><a href="#tab2">選項2</a></li> 60 <li><a href="#tab3">選項3</a></li> 61 </ul> 62 <div id="tab1">作者:ghostwu(1) 63 <div>博客: http://www.cnblogs.com/ghostwu/</div> 64 </div> 65 <div id="tab2">作者:ghostwu(2) 66 <div>博客: http://www.cnblogs.com/ghostwu/</div> 67 </div> 68 <div id="tab3">作者:ghostwu(3) 69 <div>博客: http://www.cnblogs.com/ghostwu/</div> 70 </div> 71 </div> 72 </body> 73 </html>
tab2.js文件
1 ;(function ($) { 2 $.fn.tabs = function (opt) { 3 var def = { evType: "click" }; //定義了一個預設配置 4 var opts = $.extend({}, def, opt); 5 var obj = $(this); 6 7 $("ul li:first", obj).addClass("active"); 8 obj.children("div").hide(); 9 obj.children("div").eq(0).show(); 10 11 $("ul li", obj).bind(opts.evType, function () { 12 $(this).attr("class", "active").siblings("li").attr("class",""); 13 var id = $(this).find("a").attr("href").substring(1); 14 obj.children("div").hide(); 15 $("#" + id, obj).show(); 16 }); 17 }; 18 })(jQuery);
1,一個自執行函數,把插件封裝成模塊,把jQuery對象傳給形參$
2,第3行,定義一個預設配置,選項卡的觸發類型,預設為點擊事件
3,第4行,如果opt傳參,就用opt的配置,否者就用第3行的預設配置,這行的作用就是為了在不改變插件源碼的情況下,可以配置插件的表現形式
4,第7-9行,讓選項卡第一個div顯示,其餘的都隱藏,讓第一個tab加上class='active' 黃色高亮選中
5,第11-16行,點擊對應的選項卡,讓對應的div顯示與隱藏