【jQuery基礎學習】08 編寫自定義jQuery插件

来源:http://www.cnblogs.com/vvjiang/archive/2016/02/03/5178801.html
-Advertisement-
Play Games

本來想寫jQuery UI插件的,但是想了想還是算了。 本書介紹jQuery UI插件的時候太過簡單,所以,準備在寫完了jQuery這個系列之後,單獨把jQueryUI拿出來寫一個系列並順便加入jQuery.grid插件。 儘量把最新的jQuery UI的各個方面都寫一個簡單的小例子和效果圖,以後用


本來想寫jQuery UI插件的,但是想了想還是算了。

本書介紹jQuery UI插件的時候太過簡單,所以,準備在寫完了jQuery這個系列之後,單獨把jQueryUI拿出來寫一個系列並順便加入jQuery.grid插件。

儘量把最新的jQuery UI的各個方面都寫一個簡單的小例子和效果圖,以後用來複制粘貼。\(^o^)/

 

那麼就讓我們來開始學習編寫jQuery的插件吧。

目的:雖然jQuery各種各樣的功能已經很完善了,但是我們還是要學會自己去編寫插件。這樣我們可以去封裝一些項目中經常用到的專屬的代碼,以便後期維護和提高開發效率。

jQuery插件的類型:

  • 封裝對象方法的插件
    • 大部分jQuery的插件都屬於這種,對獲取的jQuery對象進行操作
  • 封裝全局函數的插件
    • 可以理解為$.ajax這種就是封裝的全局函數
  • 選擇器插件
    • 顧名思義,封裝的選擇器

jQuery插件的基本要點:

  • jQuery插件的文件名推薦為:jquery.[插件名].js,以免和其它js庫插件混淆。
  • 所有對象方法應該附加到jQuery.fn對象上,所有全局方法應該附加到jQuery對象本身上。
  • 在插件內部,this指向的是當前獲取的jQuery對象,而不是DOM元素
  • 可以通過this.each來遍歷所有元素
  • 插件應該返回一個jQuery對象,以保證插件的可鏈式操作。
  • 避免在插件內部使用$,而應該使用完整的jQuery。當然也可以用閉包的技巧來迴避這個問題。
    (function($){
        //此處編寫jQuery插件代碼,這種閉包玩法就不在這裡解釋了,我前面的js基礎系列寫過了,不懂的請轉到這個地址看看http://www.cnblogs.com/vvjiang/p/5143852.html。在此篇文章最後的部分就是。
    })(jQuery);

jQuery插件的機制:

jQuery提供了兩個用於擴展jQuery功能的插件,即jQuery.fn.extend()方法和jQuery.extend()方法。

前者實現封裝對象方法的插件,後者實現封住選擇器插件和全局函數插件。

jQuery.extend()除了用於擴展jQuery對象之外,還可以擴展已經存在的object對象,所以經常被用於設置插件方法的一系列預設參數。如:

    function myFunc(options){
        options=jQuery.extend({
            name:"bar",
            length:1
        },options);
    }
    myFunc({name:"asd"});//此時函數調用後options的name為asd,length為1

編寫jQuery插件

  • 封裝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);
                      $(this)[hasSelected?"removeClass":"addClass"](options.selected)
                          .find(":checkbox").attr('checked',!hasSelected);
                  });
                  $("tbody>tr:has(:checked)",this).addClass(options.selected);
                  return this;//返回this,支撐鏈式操作
              }
          });
      })(jQuery);
      $("tbody>tr:odd",this)這種用法在加上第二個參數this後,第一個參數的選擇器就只會在this這個對象下進行篩選。
  • 封裝全局函數的插件
    • 去除左空白字元和去除右空白字元的插件例子:
      (function($){
          $.extend({
              ltrim:function(text){
                  return (text||"").replace(/^\s+/g,"");
              },
              rtrim:function(text){
                  return (text||"").replace(/\s+$/g,"");
              }
          });
      })(jQuery);
  • 自定義選擇器的插件
    • 選擇索引介於兩個數中間的元素的選擇器插件例子:
      (function($){
          $.extend(jQuery.expr[":"],{
              between:function(a,i,m){//選擇器函數
                  //a指向的是當前遍歷到的DOM元素
                  //i指的是當前遍歷到的DOM元素的索引值
                  //m最為特別,它是由jQuery正則解析引擎進一步解析後的產物,是一個數組
                  //這裡只講m[3],比如選擇器:gt(2)那麼m[3]就為2,如果是多個,那麼就是"2,5"這種以逗號分隔的參數字元串
                  var tmp=m[3].split(",");//以逗號為分隔符,切成一個數組
                  return tmp[0]-0<i&&i<tmp[1]-0;//這裡用-0可以將字元串轉換為數字
              }
          });
      })(jQuery);
      $("div:between(2,5)")

 


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

-Advertisement-
Play Games
更多相關文章
  • 如何在頁面呈現一段html代碼段呢?在textarea中我們這樣寫:<textarea name="" id="" cols="30" rows="" ng-model="app.someHtml"></textarea>也可以這樣寫:<div ng-bind-html="app.someHtml"
  • 有這樣的一個場景,這裡有一個表單:<form role="form"> ...</form>我們希望在form的外層動態包裹上一層。有可能是這樣:<div id="well"> <form role="form"> ... </form></div>也有可能是這樣:<div id="red"> <f
  • js實現 全選 不選 反選 思路: 1,獲取元素 2,給全選 不選 反選添加點擊事件 3,用for迴圈checkbox 4,把checkbox的checked設置為true即實現全選 5,把checkbox的checked設置為false即實現不選 6,通過if判斷,如果checked為true選中
  • js選項卡的實現: 思路 1,獲取元素; 2,for迴圈按鈕元素添加onclick(點擊) 或者 onmousemove(移入)事件; 3,點擊當前按鈕時會以高亮狀態顯示,通過for迴圈歷遍把所有的按鈕樣式設置為空在把所有div的display設置為none。 4,點擊當前按鈕添加樣式,把當前div
  • 關於偽類,大家最熟悉的還是a標簽的4個偽類::link 有鏈接屬性時:visited 鏈接地址已被訪問過:active 被用戶激活(在滑鼠點擊與釋放之間發生的事件):hover 其滑鼠懸停關於這四個偽類的排列次序,很多地方都能查到,可是為什麼這麼排列?從來沒有見過有人提及。這裡我就從技術、用戶體驗、
  • 前兩天學習中,發現網站上的一個小符號,以為是插入的img,但找來找去也未發現img的地址。最後問了同學,才得知是用border屬性做出來的。 符號如右: 其css代碼如下: .fuhao { position:absolute; top:12px; left:12px; width:0px; hei
  • 前幾天在w3ctech上看到有人用純css寫出了360衛士的logo,感覺蠻好玩的。 因為自己用css以來,還沒有寫過這種玩意,出於娛樂,我也來試著嘗試一下。 開始也不知到怎麼下手,最棘手的是那兩個像太極的東東不好弄。不過,好在以前用過photoshop繪製過一些簡單的icon。所以,經過我仔細 的
  • ng-hide and ng-show directives are used to control the visibility of the HTML elements. Let us understand this with an example When Hide Salary checkb
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...