2012-08-17 48 views
2

我正在为具有我不想因更新问题而更改的代码库的应用程序使用插件。使用多个JQuery版本和noConflict

该应用程序在头中包含Jquery 1.3.2,并在整个站点中大量使用它。 不考虑这个问题,我继续使用1.8.0版本编写我的插件 ,事实证明这会弄乱原始应用程序的功能。

我一直在尝试实施noConflict方法,但没有成功。

# Site loads jQuery1.32 and other jQuery plugins 

# My awesome php & html code 

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.js"></script> 
<script type="text/javascript"> 
var $jq = jQuery.noConflict(true); 
$jq.DoSomeJQueryStuff(); 
</script> 

如何在此场景中实现noConflict?

+0

你问的是如何从v1.3代码调用你的v1.8插件? – nnnnnn 2012-08-17 07:27:54

回答

0

我觉得它就像你需要的东西。

如果我们假设这些链接顺序补充说:

  1. jQuery的1.3.2.js
  2. jQuery的1.8.0.js

我们有这样的:

jQuery.noConflict(); 

// here you can execute javascript with jquery version 1.3.2 
console.log($.fn.jquery); 


jQuery(function($){ 
    // here you can execute javascript with jquery version 1.8.0 
    console.log($.fn.jquery); 
}); 

你可以在Jsfiddle找到一个例子。

1

您需要先打电话noConflict()(或两者兼而有之)。如果没有在第一个实例上调用它,在下面包含脚本定义的时候就会出现“冲突”。

<script type="text/javascript" src="http://code.jquery.com/jquery-1.8.0.min.js"></script> 
<script type="text/javascript"> 
    var $jQ180 = jQuery.noConflict(true); 
    document.write($jQ180().jquery); // 1.8.0 
</script>​ 

... 

<script type="text/javascript" src="http://code.jquery.com/jquery-1.3.2.js"></script> 
<script type="text/javascript"> 
    document.write($().jquery); // 1.3.2 
</script> 
+0

问题是我不想使用1.3.2 – Artmann 2012-08-17 07:44:49

+0

来更改任何代码是否可以首先定义1.8?例如,如果您可以在1.3.2定义的上方放置1.8,并调用noConflict(),那么我认为您会没事的。 – 2012-08-17 07:47:07

+0

这项工作,但它迫使我改变我试图避免的主应用程序头的代码 – Artmann 2012-08-17 07:55:45