【问题标题】:Using multiple JQuery versions and noConflict使用多个 JQuery 版本并且没有冲突
【发布时间】:2012-08-17 17:44:34
【问题描述】:

我正在使用一个应用程序的插件,该应用程序的代码库由于更新问题而不想更改。

该应用程序在标题中包含 Jquery 1.3.2,并在整个站点中大量使用它。 没想到这一点,我继续使用 1.8.0 版本编写了我的插件 事实证明这会破坏原始应用程序的功能。

我一直在尝试实现 noConflict 方法,但没有成功。

# Site loads jQuery1.32 and other jQuery plugins

# My awesome php & html code

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.js"></script>
<script type="text/javascript">
var $jq = jQuery.noConflict(true);  
$jq.DoSomeJQueryStuff();
</script>

如何在这种情况下实现 noConflict?

【问题讨论】:

  • 您是在问如何从 v1.3 代码调用您的 v1.8 插件吗?

标签: jquery


【解决方案1】:

您需要致电noConflict(),以先到者为准(或两者兼有)。如果没有在第一个实例上调用它,那么在您包含下面的脚本定义时已经存在“冲突”。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script>
<script type="text/javascript">
   var $jQ180 = jQuery.noConflict(true);
   document.write($jQ180().jquery); // 1.8.0
</script>​

...

<script type="text/javascript" src="http://code.jquery.com/jquery-1.3.2.js"></script>
<script type="text/javascript">
    document.write($().jquery); // 1.3.2
</script>

【讨论】:

  • 问题是我不想使用 1.3.2 更改任何代码
  • 可以先定义1.8吗?例如,如果你可以将 1.8 放在 1.3.2 定义之上的头部,并在上面调用 noConflict(),我想你会没事的。
  • 这项工作,但它迫使我更改我试图避免的主要应用程序标头的代码
  • 最后加载 1.3.2 以及调用 .noConflict() 之前的任何内容都非常重要。否则,原插件可能无法正常工作。
  • 这就是我所害怕的。
【解决方案2】:

我认为你需要这样的东西。

如果我们假设链接按此顺序添加:

  1. jquery-1.3.2.js
  2. jquery-1.8.0.js

我们有这个:

jQuery.noConflict();

// here you can execute javascript with jquery version 1.3.2
console.log($.fn.jquery);


jQuery(function($){
    // here you can execute javascript with jquery version 1.8.0
    console.log($.fn.jquery);
});

您可以在 Jsfiddle 上找到一个示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多