国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

多個jQuery版本共存的處理方案

2024-05-06 16:17:03
字體:
供稿:網(wǎng)友
本文給大家分享的是一個經(jīng)常需要碰到的問題的解決方案,如何才能讓一個頁面中同時存在多個jQuery呢,這就是今天我們需要探討的話題了。
 

如何在一個頁面上讓多個jQuery共存呢?比如jquery-1.5和jquery-1.11。

你可能會問,為什么需要在一個頁面上讓多個jQuery共存?直接引用最新版本的jQuery不行嗎?

答案是,不行。因?yàn)楝F(xiàn)實(shí)生活是非常殘酷的。舉個栗子:

現(xiàn)有網(wǎng)站已經(jīng)引用了jQuery 1.5以及相關(guān)插件。如果直接將jQuery升級到最新版,這些插件就不工作了,除非你能把這些插件全部升級,或者等各個插件的作者發(fā)布支持最新版jQuery的版本。

現(xiàn)在,如果我們要基于jQuery開發(fā)新的插件或者寫JavaScript代碼,用新版本會比較省時省力。

但舊版本又絕對不能扔掉,怎么辦?

方法是通過jQuery的noConflict()來讓多版本共存。

當(dāng)我們導(dǎo)入jQuery時,jQuery僅向window這個全局空間注入兩個變量:

 

復(fù)制代碼代碼如下:

   window.$ = window.jQuery = { jQuery object };

 

同時,jQuery內(nèi)部保留舊的window.$和window.jQuery對象的引用。當(dāng)我們調(diào)用:

 

復(fù)制代碼代碼如下:

   var $jq = $.noConflict();

 

window.$被恢復(fù),但window.jQuery仍是jQuery。

當(dāng)我們調(diào)用:

 

復(fù)制代碼代碼如下:

   var $jq = $.noConflict(true);

 

window.$和window.jQuery都被恢復(fù)了,一切看起來就像jQuery從未被導(dǎo)入過一樣,只不過可以通過變量$jq來使用jQuery。

所以,讓新舊版本共存的jQuery可以這樣實(shí)現(xiàn):

 

復(fù)制代碼代碼如下:

   <script src="jquery-1.5.js"></script>
   <script src="jquery-1.11.js"></script>
   <script>
      // 現(xiàn)在window.$和window.jQuery是1.11版本:
      console.log($().jquery); // => '1.11.0'
      var $jq = jQuery.noConflict(true);
      // 現(xiàn)在window.$和window.jQuery被恢復(fù)成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);刪掉了怎么辦?或者,把導(dǎo)入jQuery的兩行互換了位置,最后就得不到正確的jQuery版本。

最好的辦法是不改動頁面,直接引用我們編寫的新的js文件:

 

復(fù)制代碼代碼如下:

   <script src="jquery-1.5.js"></script>
   <script src="myscript.js"></script>

 

這樣一來,我們就在myscript.js內(nèi)部引用最新版jQuery,而頁面無論有沒有jQuery,有哪個版本的jQuery,我們都不關(guān)心。

開始編寫新的更好的解決方案。首先,把myscript.js的主體確定下來:

 

復(fù)制代碼代碼如下:

   // myscript.js
   (function () {
      // BEGIN
      // TODO: javascript code here...
      // END
   })();

 

用匿名函數(shù)是個好習(xí)慣,不污染全局變量,同時杜絕外部代碼訪問。

下一步是直接把jQuery 1.11的代碼嵌進(jìn)去:

 

復(fù)制代碼代碼如下:

   // 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
   })();

 

嵌入的當(dāng)然是壓縮后的代碼,一共3行,然后加一句:

 

復(fù)制代碼代碼如下:

   var $ = jQuery.noConflict(true);

 

注意到$是一個局部變量,在后面的代碼中,可以隨時引用這個$,跟頁面上其他版本的jQuery全局變量$不是一個對象。

最后一步工作就是檢查jQuery的協(xié)議是否允許我們把jQuery源碼直接嵌入我們自己的JavaScript代碼。

以上所述就是本文的全部內(nèi)容了,希望大家能夠喜歡。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表

圖片精選

主站蜘蛛池模板: 乡城县| 莱西市| 休宁县| 杨浦区| 林甸县| 商南县| 平乡县| 壤塘县| 凤凰县| 普洱| 青铜峡市| 许昌县| 年辖:市辖区| 元氏县| 赫章县| 巨鹿县| 观塘区| 丹东市| 平阳县| 平阴县| 和政县| 沙田区| 会泽县| 江北区| 天祝| 鸡西市| 台湾省| 宁都县| 乐亭县| 武平县| 五指山市| 克拉玛依市| 淄博市| 舞钢市| 疏勒县| 乐业县| 巢湖市| 金平| 惠水县| 石嘴山市| 海伦市|