本文給大家分享的是一個經常需要碰到的問題的解決方案,如何才能讓一個頁面中同時存在多個jQuery呢,這就是今天我們需要探討的話題了。
如何在一個頁面上讓多個jQuery共存呢?比如jquery-1.5和jquery-1.11。
你可能會問,為什麼需要在一個頁面上讓多個jQuery共存?直接引用最新版本的jQuery不行嗎?
答案是,不行。因為現實生活是非常殘酷的。舉個栗子:
現有網站已經引用了jQuery 1.5以及相關插件。如果直接將jQuery升級到最新版,這些插件就不工作了,除非你能把這些插件全部升級,或者等各個插件的作者發布支持最新版jQuery的版本。
現在,如果我們要基於jQuery開發新的插件或者寫JavaScript代碼,用新版本會比較省時省力。
但舊版本又絕對不能扔掉,怎麼辦?
方法是通過jQuery的noConflict()來讓多版本共存。
當我們導入jQuery時,jQuery僅向window這個全局空間注入兩個變量:
代碼如下:
同時,jQuery內部保留舊的window.$和window.jQuery對象的引用。當我們調用:
代碼如下:
window.$被恢復,但window.jQuery仍是jQuery。
當我們調用:
代碼如下:
window.$和window.jQuery都被恢復了,一切看起來就像jQuery從未被導入過一樣,只不過可以通過變量$jq來使用jQuery。
所以,讓新舊版本共存的jQuery可以這樣實現:
代碼如下:
在myscript.js中,用$jq就可以訪問1.11版本的jQuery了。
至此,問題解決。
但是,引入兩個版本的jQuery後,頁面被搞得亂七八糟。如果有人看不懂代碼,把var $jq = jQuery.noConflict(true);刪掉了怎麼辦?或者,把導入jQuery的兩行互換了位置,最後就得不到正確的jQuery版本。
最好的辦法是不改動頁面,直接引用我們編寫的新的js文件:
代碼如下:
這樣一來,我們就在myscript.js內部引用最新版jQuery,而頁面無論有沒有jQuery,有哪個版本的jQuery,我們都不關心。
開始編寫新的更好的解決方案。首先,把myscript.js的主體確定下來:
代碼如下:
用匿名函數是個好習慣,不污染全局變量,同時杜絕外部代碼訪問。
下一步是直接把jQuery 1.11的代碼嵌進去:
代碼如下:
嵌入的當然是壓縮後的代碼,一共3行,然後加一句:
代碼如下:
注意到$是一個局部變量,在後面的代碼中,可以隨時引用這個$,跟頁面上其他版本的jQuery全局變量$不是一個對象。
最後一步工作就是檢查jQuery的協議是否允許我們把jQuery源碼直接嵌入我們自己的JavaScript代碼。
以上所述就是本文的全部內容了,希望大家能夠喜歡。