搜尋
首頁web前端js教程jQuery外掛開發詳細教學_jquery

擴充jQuery外掛和方法的作用是非常強大的,它可以節省大量開發時間。這篇文章將概述jQuery插件開發的基本知識,最佳做法和常見的陷阱。

一、入門

寫一個jQuery外掛程式開始於為jQuery.fn加入新的功能屬性,此處新增的物件屬性的名稱就是你外掛程式的名稱:

複製程式碼 程式碼如下:

jQuery.fn.myPlugin = function(){

  //你自己的外掛程式碼








};

使用者非常喜歡的$符號哪裡去了? 它仍然存在,但是,為了避免和其他JavaScript庫衝突,我們最好將jQuery傳遞給一個自我執行的封閉程序,jQuery在此程序中映射為$符號,這樣可以避免$號被其他庫覆蓋。



複製程式碼


程式碼如下:

(ffnunction ($) {(ffn .MyPlugin = function () {        //你自己的插件程式碼
    };
})(jQuery);

在這個封閉程式中,我們可以在這個封閉程式中,我們可以無限制的使用$符號來表示jQuery函數。



二、環境


現在,我們可以開始寫實際的外掛程式碼。 但是,在這之前,我們必須要對插件所處的環境有個概念。 在插件的範圍裡, this關鍵字代表了這個插件將要執行的jQuery對象, 這裡容易產生一個普遍的誤區,因為在其他包含callback的jQuery函數中,this關鍵字代表了原生的DOM元素。這常常會導致開發者誤將this關鍵字無謂的包在jQuery中,如下所示。




複製程式碼

程式碼如下:


(ffnunction ($) {

(ffn .MyPlugin = function () {


        //此處上沒有必要將this包在$號如$(this),因為this已經是一個jQuery物件。 this)等同於$($('#element'));

        this.fadeIn('normal', function () {        });    };
})(jQuery);

$('>})(jQuery);

$('帶>



三、基礎知識


現在,我們了解jQuery插件的基礎知識,讓我們寫一個插件,做一些事情。




複製代碼

代碼如下:

(function ($) {

$.fn.maxHeight = function () {


        var max = 0;

      max, $ (this).height());        });        return max;    };}; div').maxHeight(); //傳回高度最大的div元素的高度
這是一個簡單的插件,利用.height()返回頁面中高度最大的div元素的高度。 四、維護Chainability 很多時候,一個插件的意圖只是以某種方式修改收集的元素,並把它們傳遞給鏈中的下一個方法。 這是jQuery的設計之美,也是jQuery如此受歡迎的原因之一。 因此,要保持一個插件的chainability,你必須確保你的插件回到this關鍵字。 複製程式碼 程式碼如下:

(function ($) {

    $.fn.lockDimensions = function (type) {

     > var $this = $(this);

            if (!type || type == 'width') {
               }

            if (!type || type == 'height') {
              }

        });

    };
})(jQuery);

$('div').lockDimensions('width').CSS('color', 'red');


由於外掛程式回傳this關鍵字,它保持了chainability,這樣jQuery收集的元素可以繼續被jQuery方法如.css控制。 因此,如果你的外掛不回傳固有的價值,你應該總是在其作用範圍內回傳this關鍵字。 此外,你可能會推斷出,傳遞給插件的參數將會在插件的作用範圍內傳遞。 因此,在前面的例子,字串'width'變成了插件的類型參數。
五、預設值和選項

對於比較複雜的和提供了許多選項可定制的的插件,最好有一個當插件被調用的時候可以被拓展的預設值(透過使用$.extend)。 因此,相對於呼叫一個有大量參數的插件,你可以呼叫一個物件參數,包含你了你想覆寫的設定。


複製代碼

代碼如下:(function ($) {
$.fn.tooltip = function (options) {

        //建立一些預設值,以拓展任何提供的選項
      top ',
            'background-color': 'blue'
        }, options);
    }           // Tooltip插件代碼

        });

    };
})(jQuery);

$('div').tooltip({ 
});


在這個範例中,呼叫tooltip插件時覆寫了預設設定中的location選項,background-color選項保持預設值,所以最終被呼叫的設定值為:




複製程式碼
程式碼如下:


{    'location': 'left', blue'}這是一個很靈活的方式,提供一個高度可配置的插件,而無需開發人員定義所有可用的選項。

六、命名空間


正確命名空間你的插件是插件開發的一個非常重要的一部分。 正確的命名空間,可以確保你的外掛程式將有一個非常低的機會被其他外掛程式或同一頁上的其他程式碼覆蓋。 命名空間也使得你的生活作為一個插件開發人員更容易,因為它可以幫助你更好地追蹤你的方法,事件和數據。

七、插件方法


在任何情況下,一個單獨的插件不應該在jQuery.fnjQuery.fn物件裡有多個命名空間。

複製代碼

代碼如下:


(function ($) { $.fn.tooltip = function (options) {        // this    };    $.fn.to  🎜>    $ .fn.tooltipHide = function () {        // bad
    };
    $.fn 🎜>
})(jQuery);

這是不被鼓勵的,因為它$.fn使$.fn命名空間混亂。 為了解決這個問題,你應該收集物件文字中的所有插件的方法,透過傳遞該方法的字串名稱給插件以呼叫它們。
複製代碼 代碼如下:

(function ($) {

var methods = {
        init: function (options) {
            //  🎜>            // is
        },
        hide: function () {
            // good
        },
     !
        }
    };

    $. fn.tooltip = function (method) {

        // 方法呼叫
       if .prototype.slice.call (arguments, 1));
        } else if (typeof method === 'object' || !method) {
          } else {
            $.error('Method' method 'does not exist on jQuery.tooltip');
     🎜>
//呼叫init方法
$('div').tooltip();

//呼叫init方法
$('div').tooltip({
    foo: ' bar'
});

// 呼叫hide方法
$('div').tooltip('hide');

//呼叫Update方法
$('div').tooltip('update', 'This is the new tooltip content!');


這種類型的插件架構允許您封裝所有的方法在父包中,透過傳遞該方法的字串名稱和額外的此方法所需的參數來呼叫它們。 這種方法的封裝和架構類型是jQuery插件社群的標準,它被無數的插件在使用,包括jQueryUI中的插件和widgets。


八、事件


一個鮮為人知bind方法的功能即允許綁定事件命名空間。 如果你的插件綁定一個事件,一個很好的做法是賦予此事件命名空間。 透過這種方式,當你在解除綁定的時候不會幹擾其他可能已經綁定的相同類型事件。   你可以透過追加命名空間到你需要綁定的事件經過 ‘.'。

複製程式碼

程式碼如下:


(function ($) {

    varmethods = {
        init: function ( {
$ (window).bind('resize.tooltip',methods.reposition);
            });

   🎜>            傳回此值。 every(function () {
                $(window).unbind('.tooltip');
   🎜>        重新定位: function () {
           // 。  隱藏:函數() {
            //...
} ,
        更新:函數(內容){
            //...
    (方法){

        if (methods[method]) {
            returnmethods[method. (typeof method === 'object ' || !method) {
            returnmeth ery.tooltip上不存在');
        }
    };

})(jQuery);

$('#fun').tooltip();

$('#fun').tooltip();

$('#fun').tooltip();

$('#fun').tooltip();

$('#fun').tooltip();

$('#fun').toop();
..
$('#fun').tooltip('銷毀');


在這個範例中,當tooltip透過init方法初始化時,會將reposition方法綁定到resize事件並給reposition非該方法透過追加.tooltip賦予命名空間。稍後,當開發人員需要呼叫tooltip的時候,我們可以同時解除其中reposition方法和resize事件的綁定,透過傳遞reposition的命名空間給插件。這使我們能夠安全地解除事件的綁定並不會影響到此外掛程式之外的綁定。


九、資料


通常在插件開發的時候,你可能需要記錄或檢查你的插件是否已經被初始化給了一個元素。使用 jQuery 的資料方法是一個很好的基於元素的記錄變數的方法。儘管如此,相對對於記錄大量不同名字的分離的數據,使用一個單獨的物件保存所有變量,並透過一個單獨的命名空間讀取這個物件不失為一個更好的方法。

複製程式碼

程式碼如下:


(function ($) {

    varmethods = {
        init: function ( {

               var $this = $(this),
                         tooltip = $('
', {
                ('title')
                    });

            if (!data) {

                     🎜>                    */

                            目標:$this,
                        });

}
            });
        },
       each(function () {

                var $this = $(this) ,
                               $(window).unbind('.tooltip');
data.tooltip. remove();
                $this.removeData('tooltip');

   🎜>        重新定位: function () {
           / / .. .
        },
        顯示:函數() {
         隱藏:函數() {
            // ...
        },
        更新:函數(內容){
            // ...
      {

if (methods[method]) {
            returnmethods[method].apply(this, Array.prototype.slice.call(arguments, 1));            returnmethods.init.apply(this,arguments);
        }else {
            $.error('Method ' method ' does not exist on jQuery.tooltip');
    );


將資料透過命名空間封裝在一個物件中,可以更容易的從一個集中的位置讀取所有插件的屬性。
十、總結與最佳做法



編寫jQuery外掛程式可讓你做出函式庫,將最有用的功能整合到可重複使用的程式碼,可以節省開發者的時間,讓開發更有效率。 開發jQuery外掛時,要牢記: 1.總是包裹在一個封閉的插件:


複製程式碼

程式碼如下:(function ($) {/* plugin goes here */})(jQuery);
2.不要冗餘包裹this關鍵字在插件的功能範圍內
3.除非插件會傳回特定值,否則總是會傳回this關鍵字來維持chainability 。
4.傳遞一個可拓展的預設物件參數而不是大量的參數給插件。
5.不要在一個外掛程式中多次命名不同方法。
3.始終命名空間的方法,事件和資料。
陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
jquery实现多少秒后隐藏图片jquery实现多少秒后隐藏图片Apr 20, 2022 pm 05:33 PM

实现方法:1、用“$("img").delay(毫秒数).fadeOut()”语句,delay()设置延迟秒数;2、用“setTimeout(function(){ $("img").hide(); },毫秒值);”语句,通过定时器来延迟。

axios与jquery的区别是什么axios与jquery的区别是什么Apr 20, 2022 pm 06:18 PM

区别:1、axios是一个异步请求框架,用于封装底层的XMLHttpRequest,而jquery是一个JavaScript库,只是顺便封装了dom操作;2、axios是基于承诺对象的,可以用承诺对象中的方法,而jquery不基于承诺对象。

jquery怎么修改min-height样式jquery怎么修改min-height样式Apr 20, 2022 pm 12:19 PM

修改方法:1、用css()设置新样式,语法“$(元素).css("min-height","新值")”;2、用attr(),通过设置style属性来添加新样式,语法“$(元素).attr("style","min-height:新值")”。

jquery怎么在body中增加元素jquery怎么在body中增加元素Apr 22, 2022 am 11:13 AM

增加元素的方法:1、用append(),语法“$("body").append(新元素)”,可向body内部的末尾处增加元素;2、用prepend(),语法“$("body").prepend(新元素)”,可向body内部的开始处增加元素。

jquery怎么删除div内所有子元素jquery怎么删除div内所有子元素Apr 21, 2022 pm 07:08 PM

删除方法:1、用empty(),语法“$("div").empty();”,可删除所有子节点和内容;2、用children()和remove(),语法“$("div").children().remove();”,只删除子元素,不删除内容。

jquery中apply()方法怎么用jquery中apply()方法怎么用Apr 24, 2022 pm 05:35 PM

在jquery中,apply()方法用于改变this指向,使用另一个对象替换当前对象,是应用某一对象的一个方法,语法为“apply(thisobj,[argarray])”;参数argarray表示的是以数组的形式进行传递。

jquery on()有几个参数jquery on()有几个参数Apr 21, 2022 am 11:29 AM

on()方法有4个参数:1、第一个参数不可省略,规定要从被选元素添加的一个或多个事件或命名空间;2、第二个参数可省略,规定元素的事件处理程序;3、第三个参数可省略,规定传递到函数的额外数据;4、第四个参数可省略,规定当事件发生时运行的函数。

jquery怎么去掉只读属性jquery怎么去掉只读属性Apr 20, 2022 pm 07:55 PM

去掉方法:1、用“$(selector).removeAttr("readonly")”语句删除readonly属性;2、用“$(selector).attr("readonly",false)”将readonly属性的值设置为false。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
2 週前By尊渡假赌尊渡假赌尊渡假赌
倉庫:如何復興隊友
1 個月前By尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island冒險:如何獲得巨型種子
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境