2009-02-09 110 views
66

我的公司已经购买了在页面上呈现ASP.NET控件的产品。这个控件使用jQuery 1.2.3并在页面上添加一个脚本标签来引用它。如果以任何方式修改控件(包括修改引用不同版本的jQuery),控件的开发人员将不支持该控件的使用。如何在同一页面上运行不同版本的jQuery?

我要开始我自己控制的发展,想使用的功能和jQuery 1.3的速度提升。这两个控件都需要存在于同一页面上。

我怎样才能让购买控制使用jQuery 1.2.3和新的自定义开发使用jQuery 1.3?同样出于好奇,如果我们要使用额外的控件来引用另一个jQuery版本呢?

+1

是否控制未发布更新的作者的作者?还是新版本不兼容? 非常奇怪的是,商业第三方控件供应商创建了一个硬编码到经常更新的开源javascript特定版本的控件。 – BlackMael 2009-02-09 14:18:49

+0

如果您使用坚持固定版本的jQuery的多服务器控件,我看不出你是如何搞砸的。 – BlackMael 2009-02-09 14:20:58

+1

并非每个插件作者都会定期更新/更新其代码。我也遇到了这个问题,但后来我转而采用了经常更新的社区驱动的等价物。 – 2011-12-29 12:30:23

回答

99

您可以通过在no-conflict mode运行你的jQuery的版本实现这一目标。 “无冲突”模式是让jQuery在其他框架(如prototype)上工作的典型解决方案,也可以在此处使用,因为它基本上为您加载的每个jQuery版本命名空间。

<script src="jQuery1.3.js"></script> 
<script> 
    jq13 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

这一变化将意味着任何你想用就需要使用jq13而非$,例如被称为jQuery的东西

jq13("#id").hide(); 

它不具有相同的页面上运行的两个版本一个理想的情况,但如果你已经别无选择,那么上面的方法应该让你同时使用两个不同的版本。

也出于好奇,如果我们要使用额外的控件 需要引用另一个版本的jQuery?

如果您需要添加的jQuery的另一个版本,你可以扩展以上:

<script src="jQuery1.3.js"></script> 
<script> 
    jq13 = jQuery.noConflict(true); 
</script> 
<script src="jQuery1.3.1.js"></script> 
<script> 
    jq131 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

变量jq13jq131将分别被用于您所需要的特定版本的功能。

重要的是,由原始开发商使用的jQuery的最后加载 - 原开发者可能会写的假设$()会使用他们的jQuery的版本下他们的代码。如果你在他们之后加载另一个版本,$将被你加载的最后一个版本“抓住”,这意味着原始开发者的代码运行在最新的库版本上,使得noConflicts有点多余!

2

这似乎是顺序并不重要......例如:http://gist.github.com/136686。控制台输出位于顶部,所有版本似乎都位于正确的位置。

24

至于说ConroyP你可以做到这一点与jQuery.noConflict但声明变量时,不要忘了var。 喜欢这个。

<script src="jQuery1.3.js"></script> 
<script> 
    var jq13 = jQuery.noConflict(true); 
</script> 

<!-- original author's jquery version --> 
<script src="jQuery1.2.3.js"></script> 

您可以通过后功能的})增加(jq13)连接所有$'s到jq13。像这样

(function($) { 
... 
})(jq13); 
0

在第二个版本中声明变量为$ .noConflict(true)。并使用声明的变量来代替jQuery代码中使用的$。请检查下面的代码:此代码是jQuery的第二版本的声明后使用:

<script type="text/javascript"> 
var jQuery_1_9_1 = $.noConflict(true); function pageLoad(sender, args) { 

     var $ddl = jQuery_1_9_1("select[name$=drpClassCode]"); 
     var $ddl1 = jQuery_1_9_1("select[name$=drpSubContractors]"); 
     $ddl.select2(); 
     $ddl1.select2(); 

     $ddl.bind("change keyup", function() { 
      $ddl.fadeIn("slow"); 


     }); 

     $ddl.bind("change keyup", function() { 
      $ddl1.fadeIn("slow"); 


     }); 
    } 
1

使它假工作

var jq16 = $.noConflict(false); 
相关问题