在使用jQuery開發的時候,可能還會使用到其他的JS庫,例如Prototype,但多庫共存時可能會發生衝突,本文主要給大家介紹了關於jQuery庫衝突的完美解決辦法,需要的朋友可以參考借鑒,下面來一起看看吧。
我的想法就是如果讓我來設計,那我就用一個預設值$,不傳參數,那就用$,最後就掛載在window.$上,傳參數就用傳入名字,例如傳入jq,那我就掛載在window.jq上。
var myControl="jq"; (function(name){ var $=name ||"$"; //name存在$的值就是name的值,不存在或为null,$的值为字符串"$" console.log($); window[$]=function(){ alert("123"); } })(myControl) window[myControl]();
事實上這肯定不是jquery解決衝突的辦法了。那就看看jQuery怎麼解決衝突吧。
jQuery多個版本或和其他js函式庫衝突主要是常用的$符號的衝突。
一、衝突的解決
1、同一頁面jQuery多個版本衝突解決方法
<!-- 引入1.6.4版的jq --> <script></script> <script> var jq164 = jQuery.noConflict(true); </script> <!-- 引入1.4.2版的jq --> <script></script> <script> var jq142 = jQuery.noConflict(true); </script> <script> (function($){ //此时的$是jQuery-1.6.4 $('#'); })(jq164); </script> <script> jq142(function($){ //此时的$是jQuery-1.4.2 $('#'); }); </script>
2、jQuery庫在其他庫之後導入
jQuery noConflict() 方法會釋放會$ 識別碼的控制,這樣其他腳本就可以使用它了。
1、可以透過jQuery全名取代簡寫的方式來使用jQuery
在其他函式庫和jQuery函式庫都載入完畢後,可以在任何時候呼叫jQuery.noConflict()函式來將變數$的控制權移交給其他JavaSript函式庫。然後就可以在程式裡將jQuery()函數當作jQuery物件的製造工廠。
<script></script> <script></script> <p>test---prototype</p> <p>test---jQuery</p> <script> jQuery.noConflict(); //将变量$的控制权让渡给prototype.js,全名可以不调用。 jQuery(function(){ //使用jQuery jQuery("p").click(function(){ alert( jQuery(this).text() ); }); }); //此处不可以再写成$,此时的$代表prototype.js中定义的$符号。 $("pp").style.display = 'none'; //使用prototype </script>
2、自訂一個捷徑
noConflict() 可傳回對jQuery 的引用,可以把它存入自訂名稱,例如jq,$J變量,以便稍後使用。
這樣可以確保jQuery不會與其他函式庫衝突,同時又使用自訂一個捷徑。
<script> var $j = jQuery.noConflict(); //自定义一个比较短快捷方式 $j(function(){ //使用jQuery $j("p").click(function(){ alert( $j(this).text() ); }); }); $("pp").style.display = 'none'; //使用prototype </script>
3、在不衝突的情況下仍然用$
如果想在jQuery 程式碼區塊使用$ 簡寫,不願意改變這個快捷方式,可以把$ 符號當作變數傳遞給ready方法。這樣就可以在函數內使用 $ 符號了 , 而在函數外,依舊不得不使用 "jQuery"。
<script> jQuery.noConflict(); //将变量$的控制权让渡给prototype.js jQuery(document).ready(function($){ $("p").click(function(){ //继续使用 $ 方法 alert( $(this).text() ); }); }); //或者如下 jQuery(function($){ //使用jQuery $("p").click(function(){ //继续使用 $ 方法 alert( $(this).text() ); }); }); </script>
或使用IEF語句區塊,這應該是最理想的方式,因為可以透過改變最少的程式碼來實現全面的兼容性。
在我們自己寫jquery外掛時,應該都使用這種寫法,因為我們不知道具體工作過程中是如何順序引入各種js庫的,而這種語句塊的寫法卻能屏蔽衝突。
<script> jQuery.noConflict(); //将变量$的控制权让渡给prototype.js (function($){ //定义匿名函数并设置形参为$ $(function(){ //匿名函数内部的$均为jQuery $("p").click(function(){ //继续使用 $ 方法 alert($(this).text()); }); }); })(jQuery); //执行匿名函数且传递实参jQuery $("pp").style.display = 'none'; //使用prototype </script>
3、jQuery函式庫在其他函式庫之前導入
jQuery函式庫在其他函式庫之前導入,$的歸屬權預設歸後面的JavaScript函式庫所有。那麼可以直接使用"jQuery"來做一些jQuery的工作。
同時,可以使用$()方法作為其他函式庫的捷徑。這裡無須呼叫jQuery.noConflict()函數。
<!-- 引入 jQuery --> <script></script> <!-- 引入 prototype --> <script></script> <p>Test-prototype(将被隐藏)</p> <p>Test-jQuery(将被绑定单击事件)</p> <script> jQuery(function(){ //直接使用 jQuery ,没有必要调用"jQuery.noConflict()"函数。 jQuery("p").click(function(){ alert( jQuery(this).text() ); }); }); $("pp").style.display = 'none'; //使用prototype </script>
二、原理
1、原始碼
#原始碼:看一下原始碼裡怎麼做到的
var // Map over jQuery in case of overwrite _jQuery = window.jQuery, // Map over the $ in case of overwrite _$ = window.$, jQuery.extend({ noConflict: function( deep ) { if ( window.$ === jQuery ) { window.$ = _$; } if ( deep && window.jQuery === jQuery ) { window.jQuery = _jQuery; } return jQuery; } });
在jQuery載入的時候,透過事先宣告的_jQuery變數取得到目前window.jQuery,透過_$取得到目前window.$。
透過jQuery.extend()把noConflict掛載到jQuery下面。所以我們在呼叫的時候都是jQuery.noConflict()這樣調。
在呼叫noConflict()時做了2個判斷,
第一個if,把$的控制權交出去。
第二個if,在noConflict()傳參的時候把,jQuery的控制權交出去。
最後noConflict()返回jQuery對象,用哪個參數接收,哪個參數將擁有jQuery的控制權。
2、驗證
//冲突 var $ = 123; //假设其他库中$为123 $( function () { console.log($); //报错Uncaught TypeError: $ is not a function } );
解決衝突
//解决冲突 var jq = $.noConflict(); var $ = 123; jq(function () { alert($); //123 });
釋放$控制權範例
<script> var $ = 123; // window.$是123,存储在私有的_$上。 </script> <script></script> <p>aaa</p> <script> var jq = $.noConflict();//当window.$===jQuery的时候,把_$赋给了window.$。 jq(function () { alert($); //123 }); </script>
釋放jQuery控制權範例
#參數deep的作用:deep用來放棄jQuery對外的介面。
如下,noConflict()不寫參數,彈出jQuery為建構子。
<script> var $ = 123; var jQuery=456; </script> <script></script> <p>aaa</p> <script> var jq = $.noConflict(); jq(function () { alert(jQuery); //构造函数 }); </script>
如果寫個參數true,會彈出456。
<script> var $ = 123; var jQuery=456; </script> <script></script> <p>aaa</p> <script> var jq = $.noConflict(true); //写了true或者参数的时候,deep为真window.jQuery===jQuery为真,所以进入if条件。把456赋值给window.jQuery jq(function () { alert(jQuery); //456 }); </script>
相關推薦:
使用jquery.noConflict()解決jquery函式庫與其他函式庫衝突的問題
jQuery函式庫與其他JS函式庫衝突的解決方法_jquery
以上是關於jQuery庫衝突怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

JavaScript是現代網站的核心,因為它增強了網頁的交互性和動態性。 1)它允許在不刷新頁面的情況下改變內容,2)通過DOMAPI操作網頁,3)支持複雜的交互效果如動畫和拖放,4)優化性能和最佳實踐提高用戶體驗。

C 和JavaScript通過WebAssembly實現互操作性。 1)C 代碼編譯成WebAssembly模塊,引入到JavaScript環境中,增強計算能力。 2)在遊戲開發中,C 處理物理引擎和圖形渲染,JavaScript負責遊戲邏輯和用戶界面。

JavaScript在網站、移動應用、桌面應用和服務器端編程中均有廣泛應用。 1)在網站開發中,JavaScript與HTML、CSS一起操作DOM,實現動態效果,並支持如jQuery、React等框架。 2)通過ReactNative和Ionic,JavaScript用於開發跨平台移動應用。 3)Electron框架使JavaScript能構建桌面應用。 4)Node.js讓JavaScript在服務器端運行,支持高並發請求。

Python更適合數據科學和自動化,JavaScript更適合前端和全棧開發。 1.Python在數據科學和機器學習中表現出色,使用NumPy、Pandas等庫進行數據處理和建模。 2.Python在自動化和腳本編寫方面簡潔高效。 3.JavaScript在前端開發中不可或缺,用於構建動態網頁和單頁面應用。 4.JavaScript通過Node.js在後端開發中發揮作用,支持全棧開發。

C和C 在JavaScript引擎中扮演了至关重要的角色,主要用于实现解释器和JIT编译器。1)C 用于解析JavaScript源码并生成抽象语法树。2)C 负责生成和执行字节码。3)C 实现JIT编译器,在运行时优化和编译热点代码,显著提高JavaScript的执行效率。

JavaScript在現實世界中的應用包括前端和後端開發。 1)通過構建TODO列表應用展示前端應用,涉及DOM操作和事件處理。 2)通過Node.js和Express構建RESTfulAPI展示後端應用。

JavaScript在Web開發中的主要用途包括客戶端交互、表單驗證和異步通信。 1)通過DOM操作實現動態內容更新和用戶交互;2)在用戶提交數據前進行客戶端驗證,提高用戶體驗;3)通過AJAX技術實現與服務器的無刷新通信。

理解JavaScript引擎內部工作原理對開發者重要,因為它能幫助編寫更高效的代碼並理解性能瓶頸和優化策略。 1)引擎的工作流程包括解析、編譯和執行三個階段;2)執行過程中,引擎會進行動態優化,如內聯緩存和隱藏類;3)最佳實踐包括避免全局變量、優化循環、使用const和let,以及避免過度使用閉包。


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

ZendStudio 13.5.1 Mac
強大的PHP整合開發環境

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

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