Jquery版本之间的冲突

时间:2013-08-13 10:18:53

标签: jquery html

我目前有一个应用程序可以通过在HTML标题中放置以下内容来实现

<link href="{{ MEDIA_URL }}css/style.css" rel="stylesheet" type="text/css" media="screen" />
<link href="{{ MEDIA_URL }}jquery/css/custom/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/jquery-ui-1.8.6.custom.min.js"></script>

但是我也想使用需要以下内容的新引导样式

<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/bootstrap.min.js"></script>

然而,一旦我混合2我得到一些随机bevaiour与应用程序,通常以下错误“未捕获的ReferenceError:jQuery未定义”。

我该怎么做?

谢谢,

3 个答案:

答案 0 :(得分:1)

如果你真的必须有两个版本的jQuery,真的不推荐,你可以使用jQuery.noConflict

  

许多JavaScript库只使用$作为函数或变量名   就像jQuery一样。在jQuery的例子中,$只是jQuery的别名,所以   无需使用$即可使用所有功能。如果你需要使用   与jQuery一起使用的另一个JavaScript库,返回$ back的控件   通过调用$ .noConflict()到另一个库。旧的参考文献   在jQuery初始化期间保存$; noConflict()只是简单地恢复   它们。

     

如果由于某种原因加载了两个版本的jQuery(事实并非如此)   推荐),从第二个版本调用$ .noConflict(true)   将全局范围的jQuery变量返回给第一个变量   版本

文档:http://api.jquery.com/jQuery.noConflict/

但考虑重构代码只使用一个版本的jQuery并节省时间和痛苦。

答案 1 :(得分:0)

最明显的解决方案是删除第一个包含jquery和pach然后全部在一起,如下所示:

<link href="{{ MEDIA_URL }}css/style.css" rel="stylesheet" type="text/css" media="screen" />
<link href="{{ MEDIA_URL }}jquery/css/custom/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css" media="screen" />
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/jquery-1.9.1.min.js"></script>
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/jquery-ui-1.8.6.custom.min.js">   </script>
<script type="text/javascript" src="{{ MEDIA_URL }}jquery/js/bootstrap.min.js"></script>

但是您需要检查所有JqueryUI组件是否仍然正常(UI 1.8.6尚未设计为与jquery 1.9一起使用,您可能在某些小部件上遇到一些问题)

答案 2 :(得分:0)

jQuery是一个大型库,即使在缩小时也是如此。在您的网站上拥有它的两个副本是非常低效的。它会降低页面加载速度,使网站加载后运行速度变慢,并且会增加带宽成本以进行额外的不必要下载。您应该修复代码,这样就不需要两个版本。

如果你有支持库需要旧的jQuery版本,你应该将它们升级到最新版本,这可能适用于较新版本的jQuery。如果您使用的库不再受支持而且没有被ugpraded,那么您应该考虑更换它们(您不想依赖不受支持的代码,是吗?),或者尝试自己修复它们。

如果你不能这样做,或者需要更多时间,仍然有选择:

如果您的旧代码在新版本的jQuery中因为使用了一些不推荐使用的功能而失败,那么您可以使用jQuery.migrate插件来获取jQuery 1.9及更高版本,这会带来旧的弃用功能。这将允许您的旧代码继续使用新的jQuery版本。

请注意,您仍应尝试修复旧代码,以便它不需要此代码。您应该将Migrate插件视为一种临时措施,以便您有时间执行此操作。

如果您真的无法使旧的代码使用较新的库版本,并且您的网站中必须有多个jQuery副本,那么您可以使用jQuery的.noConflict功能。这允许您以自己的名称运行每个版本的jQuery,因此您可以使用$()jQuery14()来代替调用jQuery19()函数。你应该认为这是最后的手段。