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

首頁 > 編程 > JavaScript > 正文

jquery插件沖突(jquery.noconflict)解決方法分享

2019-11-20 20:55:32
字體:
來源:轉載
供稿:網友

許多的 JS 框架類庫都選擇使用$符號作為函數或變量名,jQuery是其中最為典型的一個。在 jQuery 中,$ 符號只是 window.jQuery 對象的一個引用,因此即使 $ 被刪除,window.jQuery 依然是保證整個類庫完整性的堅強后盾。jQuery 的 API 設計充分考慮了多框架之間的引用沖突,我們可以使用 jQuery.noConflict 方法來輕松實現控制權的移交。

jQuery.noConflict 方法包含一個可選的布爾參數[1],用以決定移交 $ 引用的同時是否移交 jQuery 對象本身:

復制代碼 代碼如下:

jQuery.noConflict([removeAll])

缺省情況下,執行 noConflict 會將變量 $ 的控制權移交給第一個產生 $ 的庫;當 removeAll 設置為 true 時,執行 noConflict 則會將 $ 和 jQuery 對象本身的控制權全部移交給第一個產生他們的庫。

例如在 KISSY 和 jQuery 混用,并且慣用 $ = KISSY 來簡化 API 操作的時候,就能夠通過這個方法解決命名沖突的問題。

那么這個機制是如何實現的呢?閱讀 jQuery 源碼開頭[2],首先做的一件事情是這樣的:

復制代碼 代碼如下:

// Map over jQuery in case of overwrite
_jQuery = window.jQuery,

// Map over the $ in case of overwrite
_$ = window.$,

容易理解的是,jQuery 通過兩個私有變量映射了 window 環境下的 jQuery 和 $ 兩個對象,以防止變量被強行覆蓋。一旦 noConflict 方法被調用,則通過 _jQuery, _$, jQuery, $ 四者之間的差異,來決定控制權的移交方式,具體的代碼如下:

noConflict: function( deep ) {
                if ( window.$ === jQuery ) {
                        window.$ = _$;
                }

                if ( deep && window.jQuery === jQuery ) {
                        window.jQuery = _jQuery;
                }

                return jQuery;
        }
再來看上面所說的參數設定問題,如果 deep 沒有設置,_$ 覆蓋 window.$,此時 jQuery 別名 $ 失效,但 jQuery 本身完好無損。如果有其他類庫或代碼重新定義了 $ 變量,它的控制權就完全交接出去了。反之如果 deep 設置為 true 的話,_jQuery 覆蓋 window.jQuery,此時 $ 和 jQuery 都將失效。

這種操作的好處是,不管是框架混用還是 jQuery 多版本共存這種高度沖突的執行環境,由于 noConflict 方法提供的移交機制,以及本身返回未被覆蓋的 jQuery 對象,完全能夠通過變量映射的方式解決沖突。

但無法避免的事實是可能導致的插件失效等問題,當然通過簡單修改上下文參數即可恢復 $ 別名:

復制代碼 代碼如下:

var query = jQuery.noConflict(true);
(function ($) {
// 插件或其他形式的代碼,也可以將參數設為 jQuery
})(query);

下面的示例一樣是解決這個問題的

jQuery自誕生以來,版本越來越多,而且jQuery官網的新版本還在不斷的更新和發布中,但是我們在以前的項目中就已經使用了舊版本的jQuery,比如已經出現的:1.3.X、1.4.X、1.5.X、1.6.2等等。

由于項目的需要,必然也需要不斷的使用較新版的jQuery,但對于原來就已經存在并已經采用了的舊jQuery版本,我們如何讓多個不同的jQuery版本在同一個頁面并存而不沖突呢?

其實,利用jQuery.noConflict()特性,我們不僅可以讓jQuery與其他的JS庫并存,比如Prototype。也可以與jQuery本身的其他不同版本并存而不沖突。

復制代碼 代碼如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <title>在同一個頁面中加載多個不同的jQuery版本</title>
        <!-- 從谷歌服務器加載jQuery最新版本 -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
        <script type="text/javascript">
            var jQuery_New = $.noConflict(true);
        </script>
        <!-- 加載jQuery1.6.2版本 -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
        <script type="text/javascript">
            var jQuery_1_6_2 = $.noConflict(true);
        </script>
        <!-- 加載jQuery1.5.2版本 -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
        <script type="text/javascript">
            var jQuery_1_5_2 = $.noConflict(true);
        </script>
        <!-- 加載jQuery1.4.2版本 -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
        <script type="text/javascript">
            var jQuery_1_4_2 = $.noConflict(true);
        </script>
        <!-- 加載jQuery1.3.2版本 -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
        <script type="text/javascript">
            var jQuery_1_3_2 = $.noConflict(true);
        </script>
        <script type="text/javascript">
            alert(jQuery_New.fn.jquery);
            alert(jQuery_1_6_2.fn.jquery);
            alert(jQuery_1_5_2.fn.jquery);
            alert(jQuery_1_4_2.fn.jquery);
            alert(jQuery_1_3_2.fn.jquery);

            jQuery_New(function($){$('<p>我是最新的'+$.fn.jquery+'版本添加進來的。</p>').appendTo('body');});
            jQuery_1_6_2(function($){$('<p>我是'+$.fn.jquery+'版本添加進來的。</p>').appendTo('body');});
            jQuery_1_5_2(function($){$('<p>我是'+$.fn.jquery+'版本添加進來的。</p>').appendTo('body');});
            jQuery_1_4_2(function($){$('<p>我是'+$.fn.jquery+'版本添加進來的。</p>').appendTo('body');});
            jQuery_1_3_2(function($){$('<p>我是'+$.fn.jquery+'版本添加進來的。</p>').appendTo('body');});
        </script>
    </head>
    <body>
        在同一個頁面中加載多個不同的jQuery版本
        <br>
    </body>
</html>

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av免费在线观看| 国产自产女人91一区在线观看| 亚洲一区二区久久久久久久| 97涩涩爰在线观看亚洲| 亚洲视频在线播放| www.亚洲男人天堂| 青青久久av北条麻妃黑人| 色小说视频一区| 国产精彩精品视频| 欧美日韩激情小视频| 国产97在线视频| 亚洲精品一区av在线播放| 欧美在线视频免费播放| 91av视频在线| 国色天香2019中文字幕在线观看| 91在线免费网站| wwwwwwww亚洲| 亚洲系列中文字幕| 色综合久久88色综合天天看泰| 亚洲午夜色婷婷在线| 97色在线视频| 国产丝袜一区二区三区| 日韩在线免费视频| 久久久久久这里只有精品| 国产精品日韩欧美综合| 在线视频欧美性高潮| 亚洲精品一区二区久| 亚洲美女精品成人在线视频| 久久99精品久久久久久青青91| 欧美性猛交xxx| 亚洲综合国产精品| 亚洲第一av网| 欧美裸体xxxx极品少妇| 欧美性猛交xxxx免费看漫画| 国产精品久久久久久久久男| 国产精品久久久久久av福利软件| 日韩电影免费观看中文字幕| 成人福利视频网| 91精品国产成人www| 欧美精品aaa| 欧美日韩亚洲天堂| 精品久久久久久久久久久久久久| 国产97在线观看| 色噜噜亚洲精品中文字幕| 在线观看中文字幕亚洲| 国产精品激情av电影在线观看| 这里只有精品视频| 不卡av电影在线观看| 亚洲精品国产福利| 亚洲国产精品推荐| 九九久久久久久久久激情| 国产亚洲人成网站在线观看| 黄色成人av在线| 欧美激情18p| www.欧美精品一二三区| 国产在线观看精品一区二区三区| 国产精自产拍久久久久久蜜| 亚洲男人第一网站| 国产精品夫妻激情| 日韩欧美999| 91精品免费视频| 亚洲曰本av电影| 青青久久av北条麻妃黑人| 欧美在线视频免费| 1769国内精品视频在线播放| 68精品国产免费久久久久久婷婷| 久久97精品久久久久久久不卡| 亚洲人成网站777色婷婷| 欧美一区二区三区精品电影| 欧美精品一二区| 中文字幕视频在线免费欧美日韩综合在线看| 日本一区二区在线播放| 国产精品日韩欧美| 国产亚洲精品久久久久久牛牛| 疯狂做受xxxx欧美肥白少妇| 亚洲欧美色图片| 欧美人在线观看| 亚洲综合在线小说| 97视频在线观看视频免费视频| 欧美一二三视频| 日本欧美在线视频| 欧美午夜精品久久久久久人妖| 日韩成人av网址| 亚洲电影免费观看高清完整版在线观看| 欧美在线视频导航| 久久精品视频99| 日本久久精品视频| 国产自产女人91一区在线观看| 亚洲人成网站色ww在线| 亚洲欧美三级在线| 欧美日韩国产丝袜另类| 久久99热精品这里久久精品| 日韩视频中文字幕| 久久精品国产久精国产一老狼| 日本欧美中文字幕| 精品久久香蕉国产线看观看gif| 久色乳综合思思在线视频| 伊人久久免费视频| 成人在线一区二区| 国产97色在线| 欧美美女操人视频| 日韩在线视频二区| 91精品视频在线播放| 国产一区二区成人| 日韩国产激情在线| 日本久久久久久| 久久综合伊人77777蜜臀| 欧美大片第1页| 欧洲亚洲免费视频| 九九久久国产精品| 欧美尤物巨大精品爽| zzjj国产精品一区二区| 亚洲精品美女在线观看| 亚洲精品成人久久电影| 26uuu亚洲伊人春色| 91亚洲精品一区| 激情成人中文字幕| 国产精品午夜视频| 久久免费视频网| 国内精品视频在线| 欧美一级黄色网| 欧美日韩在线视频首页| 欧美性受xxxx黑人猛交| 亚洲一区二区三区乱码aⅴ| 久久久最新网址| 亚洲午夜未满十八勿入免费观看全集| 91在线观看免费观看| 国内精品免费午夜毛片| 亚洲精品在线视频| 国产精品高精视频免费| 欧美一级大片在线观看| 91久久久亚洲精品| 久久精品国亚洲| 国产精品免费一区二区三区都可以| 日韩中文字幕精品| 国产精品久久久久久婷婷天堂| 国产成人精品在线观看| 成人免费在线网址| 国产精品丝袜白浆摸在线| 国产自摸综合网| 亚洲激情视频在线| 日韩小视频网址| 亚洲视频一区二区三区| 亚洲一区二区中文字幕| 久久久久五月天| 欧美一级黄色网| 久久99久久99精品中文字幕| 欧美精品一区在线播放| 国产精品一区二区电影| 日韩美女视频免费在线观看| 性欧美激情精品| 国产精品久久久久久av福利| 久热精品视频在线观看一区| 欧亚精品在线观看| 国产精品视频网站| 亚洲国产精品热久久| 亚洲精品白浆高清久久久久久| 中文字幕精品一区二区精品| www.99久久热国产日韩欧美.com| 亚洲人成网站在线播| 欧美成人精品在线播放| 国产精品网红福利| 日韩av一区二区在线观看| 精品久久久999|