我可以在同一页面上使用多个版本的jQuery吗?

我正在从事的项目需要在客户的网页上使用jQuery。客户将插入我们将提供的代码块,其中包括一些<script><script>-created 中构建窗口小部件的元素<iframe>如果他们还没有使用最新版本的jQuery,则还可能(最有可能)包含<script>Google托管版本的jQuery。

问题在于某些客户可能已经安装了旧版本的jQuery。尽管如果它至少是一个相当新的版本可能会起作用,但是我们的代码确实依赖jQuery库中最近引入的一些功能,因此,在某些情况下,客户的jQuery版本太旧了。我们不能要求它们升级到最新版本的jQuery。

有没有办法加载新版本的jQuery以仅在我们代码的上下文中使用,而不会干扰或影响客户页面上的任何代码?理想情况下,也许我们可以检查jQuery的存在,检测版本,如果版本太旧,则以某种方式加载最新版本以用于我们的代码。

我本来打算在<iframe>包含我们的的客户域中将jQuery加载到<script>,这似乎是可行的,但是我希望有一种更优雅的方式来做到这一点(更不用说没有对性能和复杂性的惩罚了)额外<iframe>的)。

阳光西里小哥2020/03/16 14:56:50

绝对可以。该链接包含有关如何实现此目标的详细信息:https : //api.jquery.com/jquery.noconflict/

小哥Eva2020/03/16 14:56:50

我想说的是,您必须始终使用jQuery最新或最近的稳定版本。但是,如果您需要对其他版本进行某些处理,则可以添加该版本并将其重命名$为其他名称。例如

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script>var $oldjQuery = $.noConflict(true);</script>

如果您使用编写内容,请看这里,您$将获得最新版本。但是,如果您需要对old做任何事情,请使用$oldjQuery代替$

这是一个例子

$(function(){console.log($.fn.jquery)});
$oldjQuery (function(){console.log($oldjQuery.fn.jquery)})

演示版

古一蓝染大人别太浪2020/03/16 14:56:50

您可以根据需要在页面上拥有尽可能多的jQuery版本。

用途jQuery.noConflict()

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js" type="text/javascript"></script>
<script>
    var $i = jQuery.noConflict();
    alert($i.fn.jquery);
</script> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
    var $j = jQuery.noConflict();
    alert($j.fn.jquery);
</script> 

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script>
    var $k = jQuery.noConflict();
    alert($k.fn.jquery);
</script> 

演示 | 资源

樱阳光Pro2020/03/16 14:56:50

取自http://forum.jquery.com/topic/multiple-versions-of-jquery-on-the-same-page页面

  • 原始页面加载自己的“jquery.versionX.js” - $jQuery属于versionX。
  • 现在-你打电话给你“jquery.versionY.js” $jQuery属于versionY,再加上_$_jQuery属于versionX。
  • my_jQuery = jQuery.noConflict(true);-现在$jQuery属于versionX,_$并且_jQuery可能是空的,my_jQuery是versionY。
小小2020/03/16 14:56:50

是的,由于jQuery的noconflict模式,这是可行的。http://blog.nemikor.com/2009/10/03/using-multiple-versions-of-jquery/

<!-- load jQuery 1.1.3 -->
<script type="text/javascript" src="http://example.com/jquery-1.1.3.js"></script>
<script type="text/javascript">
var jQuery_1_1_3 = $.noConflict(true);
</script>

<!-- load jQuery 1.3.2 -->
<script type="text/javascript" src="http://example.com/jquery-1.3.2.js"></script>
<script type="text/javascript">
var jQuery_1_3_2 = $.noConflict(true);
</script>

然后,$('#selector').function();您可以代替jQuery_1_3_2('#selector').function();jQuery_1_1_3('#selector').function();