[js高手之路]jquery插件開發實戰-選項卡詳解

来源:http://www.cnblogs.com/ghostwu/archive/2017/08/29/7449318.html
-Advertisement-
Play Games

在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顯示與隱藏

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本文是筆者多年來積累和收集的知識技能圖譜,有的是筆者原創總結的最佳實踐,有的是小伙伴們的分享,其中每個秘籍圖譜裡面的內容都是互聯網高併發架構師應該瞭解和掌握的知識,筆者索性把這些圖譜收集在一起,並且歸類便於查找和學習,希望能夠幫助到每一位想成為架構師或者已經是架構師的小伙伴,這裡我們的標題“史上最全 ...
  • 針對功能需求 是否詳細定義了系統的全部輸入,包括其他源、精度、取值範圍、出現頻率等 是否定義了系統的全部輸出,包括目的地、精度、取值範圍、出現頻率、格式等 是否詳細定義了所有輸出格式,web頁面、報表等 是否詳細定義了所有硬體和軟體的外部介面,是否詳細定義了全部外部通信介面,包括握手協議,糾錯協議、 ...
  • 兩個介面,一個主題介面(一般包含了註冊觀察者,刪除觀察者,發佈三個方法),一個觀察者介面(一般只要有一個update,但發佈消息時給主題調用). 1.觀察者介面 2.主題發佈者介面 3.觀察者實現 4.主題發佈者實現 5.整合測試,兄弟 結果應該是這樣的,他們都收到了消息. ...
  • 接收請求參數 一、使用HttpServletRequest 二、參數自動匹配 SpringMVC會自動將表單參數註入到方法參數,只要和表單的name屬性保持一致 前端請求的表單 Controller代碼 三、bean對象的自動裝箱 Controller代碼段 四、 @RequestParam獲取參數 ...
  • 顧名思義,是出現在系統邊界上的一個面向API的、串列集中式的強管控服務,這裡的邊界是企業IT系統的邊界,主要起到隔離外部訪問與內部系統的作用。在微服務概念的流行之前,API網關的實體就已經誕生了,例如銀行、證券等領域常見的前置機系統,它也是解決訪問認證、報文轉換、訪問統計等問題的。移動應用、企業互聯 ...
  • 生產者與消費者模式是《設計模式》的書籍中推薦的23種模式之一,下麵我們根據示例實現此模式的代碼例子: 生產者A: //生產者A public class ProducerA extends Thread{ // 生產一個商品 private void produceGoods() { String ...
  • 目前,不管是前端開發人員還是個人站長,經常需要一些代碼處理類的工具,比如:代碼對比、代碼格式化、圖標製作等。有時就是一時急用可電腦上又沒有安裝相關的軟體,這裡為大家收集了一些我們經常會用到的線上工具。 代碼對比/歸併: http://www.matools.com/compare 正則表達式: ht ...
  • location對象其實就是window.location,其中頂級對象window可以省略 主要的屬性 location.host 主機 location.hostname 主機名 location.port 埠 location.protocol 協議 location.pathname 路徑 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...