jQuery中怎么实现2个或3个库同时存在?
jquery 中的 noconflict()属性
该函数属于全局的jquery对象
jquery.noconflict()函数用于让出jquery库对变量$(对变量jquery)的控制权
也可用于为 jquery 变量规定新的自定义名称
注:在其他的javascript库中也使用$时 此方法存在
可以防止库之间的冲突 非常有用
使用的语法如下:
jquery.noconflict( [ removeall ] )
参数removeall:是否彻底移交对变量jquery的控制权 可以传入boolean值 默认值为false
如果省略了参数removeall或该参数不为true 则表示只让出对变量$的控制权 如果该参数为true 则表示同时让出对变量$和jquery的控制权
返回值:
函数的返回值是jquery类型 返回变量jquery的引用
jquery.noconflict()方法的几种使用方法
1)将$引用的对象映射回原始的对象
代码如下:
jquery.noconflict();jquery("p p").hide();
// 使用 jquery$("content").style.display = "none";
// 使用其他库的 $()
2)恢复使用别名 $,然后创建并执行一个函数,在这个函数的作用域中仍然将 $ 作为 jquery 的别名来使用。在这个函数中,原来的 $ 对象是无效的。这个函数对于大多数不依赖于其他库的插件都十分有效:
jquery.noconflict();(function($) { $(function() { // 使用 $ 作为 jquery 别名的代码 });})(jquery);... // 其他用 $ 作为别名的库的代码
此方法应该是最理想的方法 因为可以通过改变最少的代码来实现全面的兼容性
3)可以将 jquery.noconflict() 与简写的 ready 结合,使代码更紧凑:
jquery.noconflict()(function(){ // 使用 jquery 的代码});... // 其他库使用 $ 做别名的代码
4)创建一个新的别名用以在接下来的库中使用 jquery 对象:
var j = jquery.noconflict();j("p p").hide(); // 基于 jquery 的代码$("content").style.display = "none"; // 基于其他库的 $() 代码
5)完全将 jquery 移到一个新的命名空间:
var dom = {};dom.query = jquery.noconflict(true);
结果:
dom.query("p p").hide(); // 新 jquery 的代码$("content").style.display = "none"; // 另一个库 $() 的代码jquery("p > p").hide(); // 另一个版本 jquery 的代码
6)如果jquery库在其他库之前就导入了 那么可以直接使用‘jquery’来做一些jquery的工作 同时 可以使用$()方法作为其他库的快捷方式 这里无需调用jquery。noconflict()函数
如下代码:
<p id="pp">test-prototype(将被隐藏)</p>
<p>test-jquery(将被绑定点击事件)</p>
<!--先导入jquery-->
<script src="../../script/jquery.js" type="text/javascript"></script>
<!--后导入其他库-->
<script src="lib/prototype.js" type="text/javascript"></script>
<script language="javascript">
jquery(function(){
jquery("p").click(function(){
alert(jquery(this).text());
})
})
$("pp").style.display = "none";
</script>
如果要实现两个版本的jquery库共存,我们可以编写如下代码:
<script type="text/javascript" src="jquery-1.4.2.js"></script><script type="text/javascript" src="jquery-1.11.1.js"></script><script type="text/javascript">// 让出jquery-1.11.1对变量$和变量jquery的控制权var j = jquery.noconflict( true );document.writeln( j.fn.jquery ); // 1.11.1document.writeln( $.fn.jquery ); // 1.4.2document.writeln( jquery.fn.jquery ); // 1.4.2/* * 如果前面的jquery.noconflict()没有传入参数true, * 也就是说只让出变量$的控制,则$表示1.4.2,jquery表示1.11.1 * 此时,jquery.fn.jquery为1.11.1 */ </script>
三个版本的jquery库共存,对应的jquery示例代码如下:
<script type="text/javascript" src="jquery-1.4.2.js"></script><script type="text/javascript" src="jquery-1.8.3.js"></script><script type="text/javascript" src="jquery-1.11.1.js"></script><script type="text/javascript">// 让出jquery-1.11.1对变量$和变量jquery的控制权,使用变量j来控制var j = jquery.noconflict( true );// 让出jquery-1.8.3对变量$的控制权jquery.noconflict();document.writeln( j.fn.jquery ); // 1.11.1document.writeln( jquery.fn.jquery ); // 1.8.3document.writeln( $.fn.jquery ); // 1.4.2</script>