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

2022-08-29 23:14:04

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

问题是一些客户可能已经安装了旧版本的jQuery。虽然如果它至少是一个相当新的版本,这可能有效,但我们的代码确实依赖于jQuery库中最近引入的一些功能,所以当客户的jQuery版本太旧时,肯定会有实例。我们不能要求他们升级到最新版本的jQuery。

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

我的想法是在客户的域中加载jQuery,其中还包括我们的,这似乎可能是可行的,但我希望有一种更优雅的方法来做到这一点(更不用说没有额外s的性能和复杂性损失)。<iframe><script><iframe>


答案 1

是的,由于jQuery的无冲突模式,这是可行的。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();


答案 2

在查看并尝试之后,我发现它实际上不允许一次运行多个jquery实例。在搜索了一下之后,我发现这只是诀窍,并且代码少了很多。

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js" type="text/javascript"></script>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js" type="text/javascript"></script>
<script>var $j = jQuery.noConflict(true);</script>
<script>
  $(document).ready(function(){
   console.log($().jquery); // This prints v1.4.2
   console.log($j().jquery); // This prints v1.9.1
  });
</script>

因此,在“$”之后添加“j”就是我需要做的。

$j(function() {
  $j('.button-pro').on('click', function() {
    var el = $('#cnt' + this.id.replace('btn', ''));
    $j('#contentnew > div').not(el).animate({
      height: "toggle",
      opacity: "toggle"
    }, 100).hide();
    el.toggle();
  });
});