如何實現多個版本的jQuery庫共存的情況
在實際應用中可能需要多個jQuery版本庫共存的情況。
可能很多朋友不理解為什麼要這樣,直接用最新的庫版本不就可以了。
雖然上面的提議很完美,但是實際應用中可能會後期維護或者修改一些網站的功能,如果直接使用新版本,那麼可能老版本實現的功能就無法使用,所以理想和現實還是很有差距的,下面就介紹一下如何實現共存。方法是通過jQuery的noConflict()來讓多版本共存。
當我們匯入jQuery時,jQuery僅向window這個全域性空間注入兩個變數:
[JavaScript] 純文字檢視 複製程式碼window.$ = window.jQuery = { jQuery object };
同時,jQuery內部保留舊的window.$和window.jQuery物件的引用。當我們呼叫:
[JavaScript] 純文字檢視 複製程式碼var $jq = $.noConflict();
window.$被恢復,但window.jQuery仍是jQuery。
當我們呼叫:
[JavaScript] 純文字檢視 複製程式碼var $jq = $.noConflict(true);
window.$和window.jQuery都被恢復了,一切看起來就像jQuery從未被匯入過一樣,只不過可以通過變數$jq來使用jQuery。
所以,讓新舊版本共存的jQuery可以這樣實現:
[HTML] 純文字檢視 複製程式碼<script src="jquery-1.5.js"></script> <script src="jquery-1.11.js"></script> <script> // 現在window.$和window.jQuery是1.11版本: console.log($().jquery); // => '1.11.0' var $jq = jQuery.noConflict(true); // 現在window.$和window.jQuery被恢復成1.5版本: console.log($().jquery); // => '1.5.0' // 可以通過$jq訪問1.11版本的jQuery了 </script> <script src="myscript.js"></script>
在myscript.js中,用$jq就可以訪問1.11版本的jQuery了。
但是,引入兩個版本的jQuery後,頁面被搞得亂七八糟。如果有人看不懂程式碼,把var $jq = jQuery.noConflict(true);刪掉了怎麼辦?或者,把匯入jQuery的兩行互換了位置,最後就得不到正確的jQuery版本。
最好的辦法是不改動頁面,直接引用我們編寫的新的js檔案:
[HTML] 純文字檢視 複製程式碼<script src="jquery-1.5.js"></script> <script src="myscript.js"></script>
這樣一來,就在myscript.js內部引用最新版jQuery,而頁面無論有沒有jQuery,有哪個版本的jQuery,都不關心。
開始編寫新的更好的解決方案。首先,把myscript.js的主體確定下來:
[JavaScript] 純文字檢視 複製程式碼// myscript.js (function () { // BEGIN // TODO: javascript code here... // END })();
用匿名函式是個好習慣,不汙染全域性變數,同時杜絕外部程式碼訪問。
下一步是直接把jQuery 1.11的程式碼嵌進去:
[JavaScript] 純文字檢視 複製程式碼// myscript.js (function () { // BEGIN /*! jQuery v1.11.1 */ !function(a,b){"object"==typeof module&&"object"==typeof module.exports?... if(k&&j[k]&&(e||j[k].data)||void 0!==d||"string"!=typeof b)return k||(k=... },cur:function(){var a=Zb.propHooks[this.prop];return a&&a.get?a.get(thi... var $ = jQuery.noConflict(true); // TODO: javascript code here... // END })();
嵌入的當然是壓縮後的程式碼,一共3行,然後加一句:
[JavaScript] 純文字檢視 複製程式碼var $ = jQuery.noConflict(true);
注意到$是一個區域性變數,在後面的程式碼中,可以隨時引用這個$,跟頁面上其他版本的jQuery全域性變數$不是一個物件。
最後一步工作就是檢查jQuery的協議是否允許我們把jQuery原始碼直接嵌入我們自己的JavaScript程式碼。
相關文章
- 如何在一個頁面上讓多個jQuery版本共存jQuery
- Dotnet Core多版本API共存的優雅實現API
- Macos下Cocoapods多個版本共存管理Mac
- 怎麼讓多版本的python共存?Python
- 多個Filter的執行具體情況Filter
- OneinStack多版本PHP共存PHP
- 多版本gcc/g 共存方案GC
- mysql多版本共存問題MySql
- 如何在沒有前端框架的情況下實現元件化前端框架元件化
- 04.多版本Python共存的配置和使用Python
- jQuery的事件機制,事件物件介紹,外掛機制,多庫共存,each()jQuery事件物件
- 多 PHP 版本共存的環境下安裝 Swoole 到指定版本PHP
- 多個下拉去重,jQuery實現jQuery
- 如何在零JS程式碼情況下實現一個實時聊天功能❓JS
- 如何實現一個簡化版的 jQueryjQuery
- javascript引入了不同版本的多個jquery,如何不同版本之間不互相影響JavaScriptjQuery
- 可想實現一個自己的簡單jQuery庫?(七)jQuery
- 可想實現一個自己的簡單jQuery庫?(九)jQuery
- 如何防止jQuery庫不同版本之間的衝突jQuery
- 實現一個jQuery的APIjQueryAPI
- ElasticSearch兩個節點的情況下,shard是如何分配的Elasticsearch
- jQuery實現的多列元素高度相等jQuery
- jQuery事件中on實現繫結多個事件jQuery事件
- 【人工智慧】如何在資源有限的情況下實現精益管理?人工智慧
- jQuery實現的多個陣列合並程式碼例項jQuery陣列
- 如何實現jQuery與其他javascript庫相容jQueryJavaScript
- 請教banq:在實踐機會不多的情況下如何提升java功力,多謝Java
- DevExpress控制元件與VS和.NET各個版本的支援情況devExpress控制元件
- CIO:採用多雲策略的情況分析
- oracle ora-60 deadlock發生在多個會話的情況Oracle會話
- DBMS_FLASHBACK_ARCHIVE在Oracle版本中的支援情況HiveOracle
- jQuery 在圖片和文字中插入內容(多種情況考慮)jQuery
- 多系統共存的方法(轉)
- 實現一個簡單的 jQuery 的 APIjQueryAPI
- 自己編寫的 Packagist 包如何在不釋出的情況下實現自動載入
- Python多版本情況下四種快速進入互動式命令列的操作技巧Python命令列
- 可想實現一個自己的簡單jQuery庫?(十二,完結篇)jQuery
- IE 瀏覽器各個版本 JavaScript 支援情況一覽表瀏覽器JavaScript