jQuery框架-3.jQuery自定義封裝插件和第三方插件

来源:https://www.cnblogs.com/witkeydu/archive/2018/03/26/8541906.html
-Advertisement-
Play Games

一、jQuery的封裝擴展 1、jQuery中extend方法使用 (掛在到jQuery和jQuery.fn兩對象身上的使用) 1.1、官方文檔定義: jQuery.extend Merge the contents of two or more objects together into the ...


一、jQuery的封裝擴展

1、jQuery中extend方法使用

(掛在到jQuery和jQuery.fn兩對象身上的使用)

1.1、官方文檔定義: 

jQuery.extend   Merge the contents of two or more objects together into the first object.把兩個或者多個對象合併到第一個對象當中; 

jQuery.fn.extend   Merge the contents of an object onto the jQuery prototype to provide new jQuery instance methods.把對象掛載到 jQuery 的 prototype 上以擴展一個新的 jQuery 實例方法 。

1.2、extend方法功能說明

  • 合併對象
jQuery.extend(target [, object1] [, objectN])

 它的含義是將object1,objectN合併到target中,返回值為合併後的target,由此可以看出該方法合併後,是修改了target的結構

var newSrc=$.extend({},object1,object2,objectN.)//也就是將"{}"作為target參數。不會破壞時實際參數target的結構

 

var result=$.extend({},{name:"Tom",age:21},name:"Jerry",sex:"Boy"});
 
//result={name:"Jerry",age:21,sex:"Boy"}
  •  深淺拷貝
jQuery.extend([deep], target, object1 [, objectN])

 extend方法多了一個類型為 boolean 的 [deep] 傳參,當其為 true 時,將 object1 , objectN 深度複製 後合併到 target 中。

var obj1 = {
    name: "John",
    location: {
        city: "Boston",
        county: "USA"
    }
}

var obj2 = {
    last: "Resig",
    location: {
        state: "MA",
        county: "China"
    }
}

$.extend(false, {}, obj1, obj2);
 // { name: "John", last: "Resig", location: { state: "MA", county: "China" }}

$.extend(true, {}, obj1, obj2);
 // { name: "John", last: "Resig", location: { city: "Boston", state: "MA", county: "China" }}

由此可見:

深度複製 會遞歸遍歷每個對象中含有複雜對象(如:數組、函數、json對象等)的屬性值進行複製

淺度複製 不會對複雜對象內部處理直接用後邊的對象覆蓋第一個非boolean值得對象。

  •  jQuery類方法的擴展: jQuery類省略extend 方法中的 target 參數,該方法就只傳入 object 參數,該方法功能是將該 object 合併到調用 extend 方法的對象中。
  •  jQuery對象級別的實例方法的擴展: jQuery.fn省略extend方法中的target 參數,

2、類級別的JQ封裝 

類級別的插件開發最直接的理解就是給jQuery類添加類方法,可以理解為添加靜態方法。  

類方法:直接可以使用類引用,不需要實例化就可以使用的方法。一般在項目中 類方法 都是被設置為工具類使用 

2.1 添加新的全局函數

jQuery.foo = function() {    
alert('This is a test.');   
}; 

2.2 增加多個全局函數

jQuery.foo = function() {    
alert('This is a test');   
};   
jQuery.bar = function(param) {    
alert('This is a "' + param + '".');   
};    
jQuery.foo();
jQuery.bar();
$.foo();
$.bar('bar');

2.3 通過jQuery.extend(object)方法添加類方法

jQuery.extend({      
    foo: function() {      
        alert('This is a test.');      
    },      
    bar: function(param) {      
        alert('this is a "' + param +'".');      
    }     
});  

2.4 使用命名空間

jQuery命名空間中,禁止使用了大量的javaScript函數名和變數名。但是仍然不可避免某些函數或變數名將於其他jQuery插件衝突,因此我們習慣將一些方法封裝到另一個自定義的命名空間。

jQuery.myPlugin = {           
foo:function() {           
  alert('This is a test. ');           
},           
bar:function(param) {           
  alert('This is a "' + param + '".');     
}          
};   
//採用命名空間的函數仍然是全局函數,調用時採用的方法:   
$.myPlugin.foo();          
$.myPlugin.bar('baz');  

使用獨立的插件名可避免命名空間內函數的衝突。

3.對象級別的JQ封裝

  • 實例方法 必須先創建實例,然後才能通過實例調用該 實例方法 。

1、對象級別擴展方法

形式1:  

;(function($){      
    $.fn.extend({      
        pluginName:function(opt,callback){      
        //bodying
        }      
    })      
})(jQuery);      

 形式2:

;(function($) {        
    $.fn.pluginName = function() {      
         // bodying      
    };      
})(jQuery); 

1)在jQuery環境下封裝自己的插件,首先為避免與其他庫的衝突,需要在插件的後面傳一個jQuery參數進去,對應的函數裡面的參數寫入$;(防止污染$函數)

2)未避免出現問題,需在插件的前後加入分號(分號的增加並不會影響程式的運行)

建議封裝框架:(當然也可以使用其他的形式,比如說把註冊成jq方法單獨拎出來,內容封裝成函數)

;(function($){
    $.fn.tab = function(options){
        
        var defaults = {
            //各種參數的預設設置
        }

        var options = $.extend({},defaults,options);

        this.each(function(){            
            //封裝的函數
        });

        return this;//為了更好的支持鏈式寫法
    }

})(jQuery);

var options = $.extend({},defaults,options):利用extend方法把 defaults對象的方法屬性全部整合到 options里,至於名字只是標識,符合規範即可。

this.each(function(){}):對所有滿足的選擇器註冊擴展方法。

return this:目標為實現jq的強大鏈式寫法,返回$對象。

廢話一句:別人的用的終究沒有自己的好,要麼不會,要麼會用,樣式、行為不喜好!!!(個人看法勿pengpengpeng)

二、jQuery插件

1.highcharts插件 

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>hignCharts</title>
    <style type="text/css">
        .container{
            width: 1000px;
            height: 500px;
            margin: 0 auto;
        }
    </style>
</head>
<body>
    <div id="container" class="container">
        
    </div>
</body>
<script src="http://cdn.hcharts.cn/highcharts/highcharts.js"></script>
<script type="text/javascript">
        // 圖表初始化函數
        var chart = Highcharts.chart('container', {
            chart: {
                type: 'bar',
                inverted:'false',              
            },
            series:[
                {
                    name:"銷售額",
                    data:[20000,30000,20500,20500],
                    lineWidth:2
                },
                {
                    name:"銷售額",
                    data:[30000,11190,35100,46000].reverse()
                }
            ],
            title:{
                align:"center",
                text:"各季度銷售統計",
                style:{ "color": "#ff0000", "fontSize": "20px" }
            },
            yAxis:{
                title:{
                    text:"銷售額"
                }
            },
            exporting:{
                allowHTML:"true",
            },
            xAxis:{
                title:{
                    text:"季度"
                },
                categories: ['一季度', '二季度', '三季度', '四季度'],
                tooltip:{
                    padding:20,
                    pointFormat: '{series.name}: <b>{point.y}</b><br/>',
                }
            },
            legend:{
                title:{
                    text:"類別"
                }
            },
            credits: {
                href: 'http://www.cnblogs.com/witkeydu/',
                text: '大仲馬的博客',
                style: {fontSize: 16, color: '#888888', fontWeight: 'bold'}
            }
        });
</script>
</html>

2.jqueryui插件

 

3.Autocomplete插件

 

4.Draggable插件

 

5.DatePicker插件

 

6.dialog插件

 


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

-Advertisement-
Play Games
更多相關文章
  • 預設情況下, MySQL啟用自動提交模式(變數autocommit為ON)。這意味著, 只要你執行DML操作的語句,MySQL會立即隱式提交事務(Implicit Commit)。這個跟SQL Server基本是類似的。如果你瞭解SQL Server資料庫的話。 查看autocommit模式 由於變... ...
  • 在開發通用型應用的時候,你總是需要記住,iPad並不是一個大大的iPod touch,為iPad開發的應用的界面應該更好地利用iPad的大屏幕,而不應該是iPhone應用的複製品。 參考資料:《iOS編程指南》 ...
  • 這裡說一個官方推薦的寫法: 根據上面的代碼,一旦綁定activity,也自然會註冊介面,所以只要在activity中實現介面便可以了。 ...
  • 動畫 1.常規動畫屬性設置(可以同時選擇多個進行設置) UIViewAnimationOptionLayoutSubviews:動畫過程中保證子視圖跟隨運動。**提交動畫的時候佈局子控制項,表示子控制項將和父控制項一同動畫。** UIViewAnimationOptionAllowUserInteract ...
  • 先看看效果圖 一個消息列表,然後點擊item後會刷新時間,點擊置頂後也會刷新時間,置頂規則就是根據兩個欄位來排序 如果是置頂狀態,top為1,然後每次操作都會刷新 time的時間,time是存的時間戳,先看看實體類 package com.fragmentapp.home.bean; import ...
  • 最近在項目中經常用到UITableView中的cell中帶有UITextField或UITextView的情況,然後在這種場景下,當我們點擊屏幕較下方的cell進行編輯時,這時候鍵盤彈出來會出現遮擋待輸入的cell,導致我們無法很方便地查看到我們輸入的內容,這樣的體驗是非常不好的。這個問題在之前我們 ...
  • HTML5 是下一代的 HTML。 什麼是 HTML5? HTML5 將成為 HTML、XHTML 以及 HTML DOM 的新標準。 HTML 的上一個版本誕生於 1999 年。自從那以後,Web 世界已經經歷了巨變。 HTML5 仍處於完善之中。然而,大部分現代瀏覽器已經具備了某些 HTML5 ...
  • 剛纔被博客園官方移出首頁,不服,再發一遍,絕對原創,手打,思路清晰。 首先說一下,我不是阿裡的人,也沒去阿裡面試過,這是某微信群里的一個小伙伴給的,我現在的能力達不到阿裡的要求。不過人沒夢想還不如鹹魚,有能力的話還是想去嘗試一下。本文如有不足,請勿嘲諷,指出不足即可,謝謝。碼字不易,且看且珍惜,轉載 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...