如何解决Jquery库及其他库之间的$命名冲突


Posted in Javascript onSeptember 15, 2013

首先我们应该知道,在jquery中,$(美元符号)就是jquery的别名,也就是说使用$和使用jquery是一样的,在很多时候我们命名空间时,正是因为这个$而产生的冲突的发生。比如说:$('#xmlas')和JQuery('#xmlas') 虽然在写法上不同,但在实际上却是完全等同的。

要想解决这个冲突,其实最简单的方法就是使用不同的名称来命名,或者让执行代码认为是不同的命名空间即可。

一、 jQuery库在其他库之前导入,直接使用jQuery(callback)方法如:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<!--先导入jQuery -->
<script src="../../scripts/jquery-1.3.1.js" type="text/javascript"></script>
<!--后导入其他库 -->
<script src="prototype-1.6.0.3.js" type="text/javascript"></script>
</head>
<body>
<p id="pp">test---prototype</p>
<p >test---jQuery</p>
<script type="text/javascript">
jQuery(function(){ //直接使用 jQuery ,没有必要调用"jQuery.noConflict()"函数。
jQuery("p").click(function(){
alert( jQuery(this).text() );
});
});
$("pp").style.display = 'none'; //使用prototype
</script>
</body>
</html>

二、jQuery库在其他库之后导入,使用jQuery.noConflict()方法将变量$的控制权让渡给其他库,有以下几种方式:

<script type="text/javascript">
jQuery.noConflict(); //将变量$的控制权让渡给prototype.js
jQuery(function(){ //使用jQuery
jQuery("p").click(function(){
alert( jQuery(this).text() );
});
});
$("pp").style.display = 'none'; //使用prototype
</script>

代码二

<script type="text/javascript">
var $j = jQuery.noConflict(); //自定义一个比较短快捷方式
$j(function(){ //使用jQuery
$j("p").click(function(){
alert( $j(this).text() );
});
});
$("pp").style.display = 'none'; //使用prototype
</script>

代码三

<script type="text/javascript">
jQuery.noConflict(); //将变量$的控制权让渡给prototype.js
jQuery(function($){ //使用jQuery
$("p").click(function(){ //继续使用 $ 方法
alert( $(this).text() );
});
});
$("pp").style.display = 'none'; //使用prototype
</script>

代码四

<script type="text/javascript">
jQuery.noConflict(); //将变量$的控制权让渡给prototype.js
(function($){ //定义匿名函数并设置形参为$
$(function(){ //匿名函数内部的$均为jQuery
$("p").click(function(){ //继续使用 $ 方法
alert($(this).text());
});
});
})(jQuery); //执行匿名函数且传递实参jQuery
$("pp").style.display = 'none'; //使用prototype
/*********************************************************************/
jQuery(document).ready(function(){ //一加载页面的时候就将权利让出去
jQuery.noConflict();
});
</script>

除了上面的方法之外,我们还可以采用第二种方法来解决冲突的问题,那就是最笨但最有效的解决方法:用自定义的命名空间来避免冲突。
比如说需要的项目名称为xmlas,那么我们原来的代码:

$('contentArea').show()

就可以写成以下这种形式:

XMLAS('contentArea').show()

3.在jquery代码中,当遇到冲突的时候我们可以使用$符号,这需要我们在ready事件中添上以下代码:

jQuery(document).ready(function($) { 
//你在这里可以放心的使用$了 
});

当然,您也可以简写成下面的形式:

jQuery(function($){ 
//这里为使用$的代码 
});

由此,根据第一个方法来实现的完整代码如下:

//jquery库与其他库冲突的完整解决办法 
<script type="text/javascript" src="photolist.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<script type="text/javascript"> 
$.noConflict(); 
jQuery(function($) { 
//使用了$的jquery代码 
}); 
//这里是你的其他js库代码 
</script>

 

当然,你也可以对上面的完整代码进行一步的简化,简化代码如下:

//简化后的代码 
$.noConflict()(function(){ 
//这里是你的带$的jquery代码 
}); 
//这里是其他库的代码
Javascript 相关文章推荐
Jquery中Ajax 缓存带来的影响的解决方法
May 19 Javascript
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
js 输出内容到新窗口具体实现代码
May 31 Javascript
解决用jquery load加载页面到div时,不执行页面js的问题
Feb 22 Javascript
浅析JavaScript动画
Jun 10 Javascript
使用JQuery 加载页面时调用JS的实现方法
May 30 Javascript
JS表单提交验证、input(type=number) 去三角 刷新验证码
Jun 21 Javascript
Angular 作用域scope的具体使用
Dec 11 Javascript
vue生命周期和react生命周期对比【推荐】
Sep 19 Javascript
JavaScript中的回调函数实例讲解
Jan 27 Javascript
Vue 进阶之路(三)
Apr 18 Javascript
微信内置开发 iOS修改键盘换行为搜索的解决方案
Nov 06 Javascript
异步动态加载js与css文件的js代码
Sep 15 #Javascript
javascript 实现键盘上下左右功能的小例子
Sep 15 #Javascript
js左侧三级菜单导航实例代码
Sep 13 #Javascript
jquery mobile changepage的三种传参方法介绍
Sep 13 #Javascript
jquery mobile事件多次绑定示例代码
Sep 13 #Javascript
JQuery实现点击div以外的位置隐藏该div窗口
Sep 13 #Javascript
javascript仿php的print_r函数输出json数据
Sep 13 #Javascript
You might like
根德YB400的电路分析
2021/03/02 无线电
基于ubuntu下nginx+php+mysql安装配置的具体操作步骤
2013/04/28 PHP
安装apache2.2.22配置php5.4(具体操作步骤)
2013/06/26 PHP
php+mysqli数据库连接的两种方式
2015/01/28 PHP
php结合redis高并发下发帖、发微博的实现方法
2016/12/15 PHP
PHP实现倒计时功能
2020/11/16 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
基于jquery的返回顶部效果(兼容IE6)
2011/01/17 Javascript
Jquery 表单验证类介绍与实例
2013/06/09 Javascript
javascript中的this详解
2014/12/08 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
2020/12/24 Javascript
JavaScript实现将xml转换成html table表格的方法
2015/04/17 Javascript
JQuery页面地址处理插件jqURL详解
2015/05/03 Javascript
JavaScript获取客户端IP的方法(新方法)
2016/03/11 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
JavaScript的String字符串对象常用操作总结
2016/05/26 Javascript
javascript正则表达式之分组概念与用法实例
2016/06/16 Javascript
浅谈json取值(对象和数组)
2016/06/24 Javascript
javascript深拷贝的原理与实现方法分析
2017/04/10 Javascript
JavaScript工具库之Lodash详解
2019/06/15 Javascript
python计算圆周率pi的方法
2015/07/11 Python
Python cookbook(数据结构与算法)从序列中移除重复项且保持元素间顺序不变的方法
2018/03/13 Python
python爬取哈尔滨天气信息
2018/07/14 Python
Django 通过JS实现ajax过程详解
2019/07/30 Python
利用Python绘制有趣的万圣节南瓜怪效果
2019/10/31 Python
CSS实现鼠标滑过鼠标点击代码写法
2016/12/26 HTML / CSS
亚马逊巴西站:Amazon.com.br
2019/09/22 全球购物
年度考核自我鉴定
2013/11/09 职场文书
技能竞赛活动方案
2014/02/21 职场文书
给孩子的新年寄语
2014/04/08 职场文书
工作推荐信范文
2014/05/10 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
党的群众路线学习笔记
2014/11/06 职场文书
MySQL 查询速度慢的原因
2021/05/25 MySQL
高考要来啦!用Python爬取历年高考数据并分析
2021/06/03 Python
mysql联合索引的使用规则
2021/06/23 MySQL