jQuery noconflict和多个库

时间:2015-10-28 21:59:40

标签: javascript jquery

我加载了多个jquery库,(无法更改,托管ecom平台,对某些内容的访问权限有限)所以我需要对它们进行noconflict。 当前代码:

<script type="text/javascript">
   $(document).ready(function() {
      $('nav#menu').mmenu({
         slidingSubmenus: false
      });
   });
</script>

希望它使用diff变量,如:

<script type="text/javascript">
var jQuery_1_11_1 = jQuery.noConflict(true);
</script>

如下所示:

<script type="text/javascript">
   jQuery_1_11_1(document).ready(function() {
      jQuery_1_11_1('nav#menu').mmenu({
         slidingSubmenus: false
     });
   });
</script>

但是,没有运气...... 提前感谢您的帮助!

2 个答案:

答案 0 :(得分:1)

我不相信.noConflict()就是你在这里所做的一切,它所要做的就是从全局$ namespace中删除jQuery。

您遇到的问题是您希望多个jQuery版本在同一页面上共存。

分配给变量的一般方法是正确的。脚本加载顺序很重要。如果你的1.11.1版本不应该与旧版本冲突,比如1.7.2你需要确保先加载你的版本,分配给一个变量,然后加载你想要分配给全局$ last的版本

<script type="text/javascript" src="jquery.1.11.1.js"></script>
<script type="text/javascript">
  var $jq111 = jQuery;
  // here we have set $jq111 to the current jQuery object which is 1.11.1
  // at this point $ and jQuery are also 1.11.1
</script>

//IMPORTANT: now you will load any plugins for 1.11.1 these are and should only be accessable with the 1.11.1 library but if the plugin uses the global $ you may have problems more on that later
<script type="text/javascript" src="menu.js"></script>

<script type="text/javascript" src="jquery.1.7.2.js"></script>
<script>
  // at this point $ and jQuery are 1.7.2
  // $jq111 should be 1.11.1

  // to do something with 1.11.1
  $jq111('nav#menu')...

  // The menu plugin is loaded in the context of 1.11.1
  // To ensure subcalls to the global $ work we need to create a block
  (function( $, undefined ) { 
    // $ in this scope is pointing to $jq111
    $('nav#menu').menu(...)
  }( $jq111 ));
</script>

答案 1 :(得分:0)

你得到了什么错误?你试过这个:

<script type="text/javascript">
    jQuery_1_11_1(function($) {
        $('nav#menu').mmenu({
            slidingSubmenus: false
        });
    });
</script>