Javascript 同一HTML页面中的两个不同版本的JQuery

Javascript 同一HTML页面中的两个不同版本的JQuery,javascript,jquery,html,Javascript,Jquery,Html,我有一个HTML文档,其中我在thickbox的标题中引用了jQuery 1.2.2版,后来在图片幻灯片的标记前面引用了jQuery 1.7.1版 问题是,除非删除jQuery 1.7.1的引用,然后停止幻灯片放映,否则thickbox将无法工作 我在谷歌上搜索了一下,$冲突,但建议的解决方案都不管用 我见过并尝试过的最常见的方法是:var$j=jQuery.noConflict() 如何解决此问题?如果插件表现良好,那么这应该可以工作: <script src="jquery-1.2.2

我有一个HTML文档,其中我在thickbox的标题中引用了jQuery 1.2.2版,后来在图片幻灯片的
标记前面引用了jQuery 1.7.1版

问题是,除非删除jQuery 1.7.1的引用,然后停止幻灯片放映,否则thickbox将无法工作

我在谷歌上搜索了一下,
$
冲突,但建议的解决方案都不管用

我见过并尝试过的最常见的方法是:
var$j=jQuery.noConflict()

如何解决此问题?

如果插件表现良好,那么这应该可以工作:

<script src="jquery-1.2.2.js"></script>
<script src="thickbox.js"></script>
<script src="jquery-1.7.1.js"></script>
<script src="slideshow.js"></script>

这两个函数都会在加载插件时获取全局
jQuery
值,然后在整个过程中使用它们的本地别名

如果插件希望等待就绪事件,它还可以执行以下操作:

jQuery(function($) {
    // ...Plug-in code using `$` here -- note it's a *local* `$`,
    // not the global `$`, and not the global `jQuery`...
});
…它使用传递到就绪处理程序的jQuery函数

这三个脚本中的任何一个都可以按照上面列出的脚本加载顺序正常工作(thickbox可以看到jQuery 1.2.2,slideshow可以看到jQuery 1.7.1)

但是我开头的句子中的“如果”是一个很大的“如果”。很多插件都不是以这种方式编写的



尽管如此,我还是会从任何需要jQuery 1.2.2才能工作的插件迁移出去,并且尽可能(而且几乎总是可能)避免在同一页面中加载任何库的两个不同版本,包括jQuery。

我不建议使用两个不同版本的jQuery。thickbox还有其他一些替代品,可以与最新的jQuery完美配合。


<script src="http://code.jquery.com/jquery-1.2.2.min.js"></script>
<script type="text/javascript">
  var jQ122 = jQuery.noConflict();
</script>
<script src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
  var jQ171 = jQuery.noConflict();


  (function($) { 
    $(function() {
      // here $ is jQuery 1.2.2
    });
  })(jQ122);


  (function($) { 
    $(function() {
      // here $ is jQuery 1.7.1
    });
  })(jQ171);
</script>
var jQ122=jQuery.noConflict(); var jQ171=jQuery.noConflict(); (函数($){ $(函数(){ //这里是jQuery 1.2.2 }); })(jQ122); (函数($){ $(函数(){ //这里是jQuery 1.7.1 }); })(jQ171);
您想要做的是一种非常糟糕的做法(您确实应该将所有代码迁移到同一版本),但理论上是可以做到的

无论如何,您都需要对相应的插件进行更改。。。 考虑这个代码:

<script src="jquery-1.4.js"></script>
var jQuery14 = jQuery;
<script src="jquery-1.7.js"></script>
var jQuery17 = jQuery;
被劝告。。至少可以说这是非常混乱的!
编写干净的代码或稍后付款!:)

尽管您可以使用
jQuery.noConflict()
以同时声明jQuery的不同版本

当我这样做的时候,我经常在IE8和某些库之间遇到一些问题

因此,另一种解决方案是使用iframe在当前页面中加载页面

一个页面上有给定版本的jQuery,另一个页面上有给定版本的jQuery

例如:

<iframe frameborder="0" width="700" height ="400" scrolling="no" seamless="seamless" src="your.html"></iframe>


我建议将所有内容迁移到最新版本。请提供代码好吗?这是大多数插件使用回调的副本,将在以后执行。如果jQuery的某个特定版本存在依赖关系,那么问题不会在此时出现吗?@dystroy:如果它们编写正确,则不会出现问题。这会起作用。只需小心Javascript库可能会污染名称空间(提示:整个库应该用(function()…)(JQuery)包装,如代码所示。您可能需要指定JQuery=jQ171来支持这些。另外,type=“text/Javascript”不需要。所有浏览器都默认使用javascript,这是他们应该做的。除非OP使用的库可以这样做(或者OP编辑它们来这样做),否则这没有帮助。它确实显示了一种在页面上访问两个不同版本的jQuery的方法,但是。。。
<script src="jquery-1.4.js"></script>
var jQuery14 = jQuery;
<script src="jquery-1.7.js"></script>
var jQuery17 = jQuery;
(function( $ ){
     // all your plugins code would be here
})( jQuery );     // replace "jQuery" with one of your respective jQuery14/jQuery17 versions/variables
<iframe frameborder="0" width="700" height ="400" scrolling="no" seamless="seamless" src="your.html"></iframe>