0

我目前有一个应用程序,通过在 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 混合在一起,我就会在应用程序中得到一些随机行为,通常是以下错误“未捕获的 ReferenceError:jQuery 未定义”。

我应该怎么做?

谢谢,

4

3 回答 3

1

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

许多 JavaScript 库使用 $ 作为函数或变量名,就像 jQuery 一样。在 jQuery 的例子中,$ 只是 jQuery 的别名,所以所有功能都可以在不使用 $ 的情况下使用。如果您需要与 jQuery 一起使用另一个 JavaScript 库,请通过调用 $.noConflict() 将 $ 的控制权返回给另一个库。$ 的旧引用在 jQuery 初始化期间被保存;noConflict() 只是恢复它们。

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

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

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

于 2013-08-13T10:33:22.443 回答
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 一起使用,您可能对某些小部件有一些问题)

于 2013-08-13T10:24:25.433 回答
0

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

如果您有需要旧 jQuery 版本的支持库,您应该将它们升级到最新版本,希望能与较新版本的 jQuery 一起使用。如果您正在使用的库不再受支持并且尚未升级,那么您应该考虑替换它们(您不想依赖不受支持的代码,对吗?),或者尝试自己修复它们。

如果您无法做到这一点,或者需要更多时间,仍然有以下选择:

如果您的旧代码在新版本的 jQuery 中由于使用了一些不推荐使用的功能而失败,那么您可以使用jQuery.migrate插件用于 jQuery 1.9 及更高版本,它可以恢复旧的不推荐使用的功能。这将允许您的旧代码继续使用新的 jQuery 版本。

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

如果你真的不能让你的旧代码代码与新版本的库一起工作,并且你的站点中绝对必须有多个 jQuery 副本,那么你可以使用 jQuery 的.noConflict功能。这允许您以自己的名称运行每个版本的 jQuery,因此$()您可以使用例如jQuery14()而不是调用函数。jQuery19()不过,您应该将其视为最后的手段。

于 2013-08-13T10:46:18.070 回答