亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

jquery的插件機制

2024-04-27 15:10:55
字體:
來源:轉載
供稿:網友

參考文章: https://mart.coding.net/PRojects

       http://www.jcodecraeer.com/a/jquery_js_Ajaxjishu/2012/0628/290.html

 jQuery.extend()

為了方便用戶創建插件,jquery提供了jQuery.extend()和jQuery.fn.extend()方法

1. jQuery.extend() 方法有一個重載。

*jQuery.extend(object) ,一個參數的用于擴展jQuery類本身,增加新的函數或者叫做靜態方法

2.重載版本:jQuery.extend([deep], target, object1, [objectN])

用一個或多個其他對象來擴展一個對象,返回被擴展的對象;objectN覆蓋objectN-1.....以此類推 最終覆蓋 object1.

*這個重載的方法,我們一般用來在編寫插件時用自定義插件參數去覆蓋插件的默認參數。

jQuery.fn.extend(object)

1.jQuery.fn.extend(object)擴展 jQuery 元素集來提供新的方法(通常用來制作插件)。

問:首先我們來看fn 是什么東西呢?

答:原來 jQuery.fn = jQuery.prototype,也就是jQuery對象的原型。

則:那jQuery.fn.extend()方法就是擴展jQuery對象的原型方法。

      (擴展原型上的方法,就相當于為對象添加”成員方法“;

      類的”成員方法“要類的對象才能調用,所以使用jQuery.fn.extend(object)擴展的方法;

jQuery.fn.extend(object)和jQuery.extend(object)方法一定要區分開來)

自執行的匿名函數/閉包

 1. 什么是自執行的匿名函數?       它是指形如這樣的函數: (function {// code})(); 2. 疑問 為什么(function {// code})();可以被執行, 而function {// code}();卻會報錯? 3. 分析         (1). 首先, 要清楚兩者的區別:     (function {// code})是表達式, function {// code}是函數聲明.         (2). 其次, js"預編譯"的特點:     js在"預編譯"階段, 會解釋函數聲明, 但卻會忽略表式.         (3). 當js執行到function() {//code}();時, 由于function() {//code}在"預編譯"階段已經被解釋過, js會跳過function(){//code}, 試圖去執行();, 故會報錯;         當js執行到(function {// code})();時, 由于(function {// code})是表達式, js會去對它求解得到返回值, 由于返回值是一 個函數, 故而遇到();時, 便會被執行.

   另外, 函數轉換為表達式的方法并不一定要靠分組操作符(),我們還可以用void操作符,~操作符,!操作符……

 eg:   

bootstrap 框架中的插件寫法:   !function($){  //do something;   }(jQuery);

   和    (function($){  //do something;   })(jQuery); 是一回事。

*匿名函數最大的用途是創建閉包(這是javaScript語言的特性之一),并且還可以構建命名空間,以減少全局變量的使用。

例如:     var a=1;     (function()(){    var a=100;  })();      alert(a); //彈出 1

一步一步的封裝jquery插件

1.定一個閉包區域,防止插件"污染"

//閉包限定命名空間(function ($) {    })(window.jQuery);

2.jQuery.fn.extend(object)擴展jquery 方法,制作插件

//閉包限定命名空間(function ($) {    $.fn.extend({        "highLight":function(options){            //do something        }    });})(window.jQuery);

3.給插件默認參數,實現 插件的功能

//閉包限定命名空間(function ($) {    $.fn.extend({        "highLight": function (options) {            var opts = $.extend({}, defaluts, options); //使用jQuery.extend 覆蓋插件默認參數            this.each(function () {  //這里的this 就是 jQuery對象                //遍歷所有的要高亮的dom,當調用 highLight()插件的是一個集合的時候。                var $this = $(this); //獲取當前dom 的 jQuery對象,這里的this是當前循環的dom                //根據參數來設置 dom的樣式                $this.CSS({                    backgroundColor: opts.background,                    color: opts.foreground                });            });        }    });    //默認參數    var defaluts = {        foreground: 'red',        background: 'yellow'    };})(window.jQuery);

*但是我們上面的插件,就不能這樣鏈式調用了。比如:$("p").highLight().css({marginTop:'100px'}); //將會報找不到css方法,原因在與我的自定義插件在完成功能后,沒有將 jQuery對象給返回出來。方案:(其實很簡單,就是執行完我們插件代碼的時候將jQuery對像return 出來,和上面的代碼沒啥區別)

4.暴露公共方法 給別人來擴展你的插件(如果有需求的話)

5.插件私有方法

6.其他的一些設置,如:為你的插件加入元數據插件的支持將使其變得更強大

all end

完整的高亮插件代碼如下:

//閉包限定命名空間(function ($) {    $.fn.extend({        "highLight": function (options) {            //檢測用戶傳進來的參數是否合法            if (!isValid(options))                return this;            var opts = $.extend({}, defaluts, options); //使用jQuery.extend 覆蓋插件默認參數            return this.each(function () {  //這里的this 就是 jQuery對象。這里return 為了支持鏈式調用                //遍歷所有的要高亮的dom,當調用 highLight()插件的是一個集合的時候。                var $this = $(this); //獲取當前dom 的 jQuery對象,這里的this是當前循環的dom                //根據參數來設置 dom的樣式                $this.css({                    backgroundColor: opts.background,                    color: opts.foreground                });                //格式化高亮文本                var markup = $this.html();                markup = $.fn.highLight.format(markup);                $this.html(markup);            });        }    });    //默認參數    var defaluts = {        foreground: 'red',        background: 'yellow'    };    //公共的格式化 方法. 默認是加粗,用戶可以通過覆蓋該方法達到不同的格式化效果。    $.fn.highLight.format = function (str) {        return "<strong>" + str + "</strong>";    }    //私有方法,檢測參數是否合法    function isValid(options) {        return !options || (options && typeof options === "object") ? true : false;    }})(window.jQuery);

//調用        //調用者覆蓋 插件暴露的共公方法        $.fn.highLight.format = function (txt) {            return "<em>" + txt + "</em>"        }        $(function () {            $("p").highLight({ foreground: 'orange', background: '#ccc' }); //調用自定義 高亮插件        });


上一篇:瀏覽器之兼容性問題

下一篇:js傳對象

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲欧美国产精品va在线观看| 日本精品久久久久影院| 国产不卡精品视男人的天堂| 夜色77av精品影院| 欧美成人免费在线观看| 欧美激情一区二区久久久| 欧美激情视频一区二区| 91免费人成网站在线观看18| 国产网站欧美日韩免费精品在线观看| 欧美电影在线观看网站| 永久免费精品影视网站| 久久成人18免费网站| 91免费观看网站| 国产精品久久久久久久久久久久久| 亚洲自拍小视频| 亚洲影院色无极综合| 亚洲国产成人一区| 97精品国产97久久久久久免费| 国产精品久久久91| 午夜精品久久久久久久99热| 欧美日韩亚洲精品内裤| 日本在线观看天堂男亚洲| 亚洲国产精品大全| 国产成人在线精品| 国产va免费精品高清在线观看| 国产一区二区三区四区福利| 亚洲热线99精品视频| 国产精品久久视频| 91av在线网站| 欧美放荡办公室videos4k| 国产精品大陆在线观看| 亚洲tv在线观看| 成人免费福利在线| 欧美国产精品日韩| 午夜精品www| www国产91| 成人福利在线视频| 日韩精品视频在线播放| 国产日产久久高清欧美一区| 97激碰免费视频| 国产亚洲视频在线| 欧美日韩在线视频观看| 欧美精品第一页在线播放| 亚洲综合中文字幕在线观看| 日韩经典中文字幕在线观看| 韩日精品中文字幕| 欧美电影免费在线观看| 一区二区三区视频免费| 欧美自拍视频在线| 美女性感视频久久久| 欧美黄色www| 精品二区三区线观看| 中文字幕日韩在线视频| 国产精品久久久久久av福利软件| 日韩人体视频一二区| 久久影视三级福利片| 久久国产精品网站| 国产丝袜一区视频在线观看| 成人午夜激情免费视频| 97国产在线观看| 欧美日韩成人精品| 中文字幕九色91在线| 日韩天堂在线视频| 国产精品爽爽ⅴa在线观看| 成人欧美一区二区三区在线| 一夜七次郎国产精品亚洲| 欧亚精品中文字幕| 日韩av在线最新| 欧美一级淫片videoshd| 国产精品免费网站| 久久久www成人免费精品| 欧美在线欧美在线| 欧美电影免费观看高清| 国产精品久久久久久久久久ktv| 日本高清久久天堂| 国产91精品不卡视频| 成人免费xxxxx在线观看| 中文字幕一精品亚洲无线一区| 欧美国产视频日韩| 97人洗澡人人免费公开视频碰碰碰| 欧美色欧美亚洲高清在线视频| 久久国产精品亚洲| 91精品美女在线| 国产精品电影久久久久电影网| 亚洲国产精品va在线看黑人动漫| 午夜精品一区二区三区视频免费看| 欧美日韩国产成人在线观看| 国产精品视频xxxx| 精品调教chinesegay| 91亚洲国产成人久久精品网站| 国产精品美女久久久久久免费| 久久精品成人一区二区三区| 91国内产香蕉| 国产日韩欧美在线观看| 欧美一区二区三区免费观看| 亚洲欧洲自拍偷拍| 九九久久综合网站| 国产日韩精品在线播放| 九九热r在线视频精品| 欧美视频不卡中文| 久久视频在线观看免费| 欧美老女人bb| 亚洲一区美女视频在线观看免费| 中文字幕在线视频日韩| 精品国产一区二区三区久久久狼| 国产精品1区2区在线观看| 久久影院资源网| 亚洲国产高清福利视频| 久久久亚洲影院你懂的| 成人黄色在线观看| 亚洲欧洲成视频免费观看| 伊人伊人伊人久久| 亚洲综合色激情五月| 国产日韩在线亚洲字幕中文| 久久噜噜噜精品国产亚洲综合| 日本不卡高字幕在线2019| 91免费精品国偷自产在线| 国产精品福利观看| 日韩在线资源网| 亚洲欧洲日韩国产| 精品久久久视频| 国产精品一区二区久久精品| 91久久久久久国产精品| 日韩在线观看电影| 亚洲精品一区在线观看香蕉| 不卡中文字幕av| 欧美黄色片视频| 国产91精品在线播放| 91亚洲国产成人精品性色| 日本韩国在线不卡| 国产精品久久久久久久久久尿| 欧美亚洲视频一区二区| 深夜福利亚洲导航| 成人激情视频在线| 欧洲成人午夜免费大片| 久久精品色欧美aⅴ一区二区| 国产美女扒开尿口久久久| 欧美高清理论片| 1769国产精品| 亚洲a一级视频| 久久久亚洲成人| 亚洲黄色片网站| 国产做受高潮69| 中文字幕久热精品在线视频| 日本免费一区二区三区视频观看| 欧美日本精品在线| 欧美午夜片欧美片在线观看| 欧美一区视频在线| 九九久久精品一区| 在线视频日韩精品| 亚洲丝袜一区在线| 在线午夜精品自拍| 欧美成人激情在线| 韩日精品中文字幕| 78色国产精品| 三级精品视频久久久久| 亚洲在线免费看| 日韩欧美在线播放| 久久久久久久av| 国产精品91在线| 亚洲激情电影中文字幕| 午夜精品一区二区三区在线视| 日韩在线资源网| 欧洲精品毛片网站|