jQuery IE中的多个版本noConflict

时间:2013-01-07 06:22:35

标签: javascript internet-explorer jquery

我有一个javascript小部件,我使用jQuery 1.8编写,加载到使用jQuery 1.3的客户端网站上。如果没有一些非常丑陋的黑客攻击,我无法在IE中使用noConflict。以下是呈现窗口小部件后页面的外观:

<html>
<head>
   <script type="text/javascript" src="http://code.jquery.com/jquery-1.3.min.js"></script>
</head>
<html>
<body>
   <script type="text/javascript" src="http://code.jquery.com/jquery-1.8.3.min.js"></script>
   <script>
     $jq = $.noConflict();
   </script>
</body>
</html>

在chrome中,这很好用,$ jq定义为jQuery 1.8.3,但在IE 8中这不起作用,$ jq定义为jQuery 1.3。我的猜测是它的计时问题,脚本在加载新的jQuery之前执行。我放了一些回调计时器,但它确实有效,但我想不可能有嵌入式回调定时器是正确的方法。

有什么想法吗?

修改

我无法命名空间jQuery1.3,客户端在整个页面中使用它并且不想升级。

2 个答案:

答案 0 :(得分:0)

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

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

在这种情况下 -

使用

jQuery_1_6(document).ready(function($) {
  // Code using $ as usual goes here.
});

而不是

jQuery(document).ready(function($) {
  // Code using $ as usual goes here.
});

见这里 - http://blog.nemikor.com/2009/10/03/using-multiple-versions-of-jquery/

答案 1 :(得分:0)

我最终选择了LABjs,这是一个javascript加载器。这样我就可以同步加载脚本并相应地执行代码:

<script>
   $LAB
   .script("framework.js").wait()
   .script("plugin.framework.js")
   .script("myplugin.framework.js")
   .wait(function(){
      myplugin.init();
      framework.init();
      framework.doSomething();
   });
</script>