您的位置:首页 > Web前端 > JQuery

解决jQuery引入多个库的冲突问题 jQuery.noConflict( [removeAll ] )

2014-04-08 19:25 731 查看
jQuery.noConflict( [removeAll ] )

removeAll

类型: Boolean
一个布尔值,判断是否从全局作用域中内去除所有jQuery变量(包括jQuery本身)。

很多javascript库使用
 $
 作为一个函数或者变量名,正如jquery做的一样。在jQuery下 
$
只是
jQuery
的一个别名,所以不使用
 $
所有功能都是有效的。如果我们需要同时使用jQuery和其他javascript库,我们可以使用 
$.noConflict()
$
的控制权交给其他库。旧引用的
$
 被保存在jQuery的初始化; 
noConflict()
 简单的恢复它们。

如果由于某种原因,加载两个版本的jQuery(这是不推荐), 第二个版本中调用
$.noConflict(true)
 将返回全局的jQuery变量给第一个版本。

1

2

3

4

5

6
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
// Code that uses other library's $ can follow here.
</script>

这里有个技巧对于解决冲突特别有效。
.ready()
 方法可以给 jQuery 对象取个别名,这样就能够在传给 
.ready()
 的回调函数的内部继续使用
$ 而不用担心冲突(愚人码头注:原因:.ready()是一个闭包):

1

2

3

4

5

6

7

8

9
<script type="text/javascript" src="other_lib.js"></script>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$.noConflict();
jQuery(document).ready(function($) {
// Code that uses jQuery's $ can follow here.
});
// Code that uses other library's $ can follow here.
</script>

如果必要的话,我们可以释放
jQuery
名字,传递
true
作为一个参数给这个方法。
这不是必须的,如果我们必须这样做的话(举个例子,如果我们在同一个页面上使用多个版本的jQuery库), 我们必须考虑到大多数插件依靠
jQuery
存在的变量,这种情况下,可能导致插件不能正常操作。

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<title>在同一个页面中加载多个不同的jQuery版本</title>
<!-- 从谷歌服务器加载jQuery最新版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.js"></script>
<script type="text/javascript">
var jQuery_New = $.noConflict(true);
</script>
<!-- 加载jQuery1.6.2版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
<script type="text/javascript">
var jQuery_1_6_2 = $.noConflict(true);
</script>
<!-- 加载jQuery1.5.2版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.2/jquery.min.js"></script>
<script type="text/javascript">
var jQuery_1_5_2 = $.noConflict(true);
</script>
<!-- 加载jQuery1.4.2版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
var jQuery_1_4_2 = $.noConflict(true);
</script>
<!-- 加载jQuery1.3.2版本 -->
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
var jQuery_1_3_2 = $.noConflict(true);
</script>
<script type="text/javascript">
alert(jQuery_New.fn.jquery);
alert(jQuery_1_6_2.fn.jquery);
alert(jQuery_1_5_2.fn.jquery);
alert(jQuery_1_4_2.fn.jquery);
alert(jQuery_1_3_2.fn.jquery);

jQuery_New(function($){$('<p>我是最新的'+$.fn.jquery+'版本添加进来的。</p>').appendTo('body');});
jQuery_1_6_2(function($){$('<p>我是'+$.fn.jquery+'版本添加进来的。</p>').appendTo('body');});
jQuery_1_5_2(function($){$('<p>我是'+$.fn.jquery+'版本添加进来的。</p>').appendTo('body');});
jQuery_1_4_2(function($){$('<p>我是'+$.fn.jquery+'版本添加进来的。</p>').appendTo('body');});
jQuery_1_3_2(function($){$('<p>我是'+$.fn.jquery+'版本添加进来的。</p>').appendTo('body');});
</script>
</head>
<body>
在同一个页面中加载多个不同的jQuery版本
<br>
</body>
</html>

引用自:http://www.css88.com/jqapi-1.9/jQuery.noConflict/ 更多例子

http://www.cnblogs.com/RascallySnake/archive/2010/05/07/1729417.html

http://www.cnblogs.com/liyunqi007/archive/2011/10/22/2221178.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: