如何解决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 相关文章推荐
js parsefloat parseint 转换函数
Jan 21 Javascript
jQuery实现可拖动的浮动层完整代码
May 27 Javascript
IE6下javasc#ipt:void(0) 无效的解决方法
Dec 23 Javascript
jquery选择器之层级过滤选择器详解
Jan 27 Javascript
JavaScript中reduce()方法的使用详解
Jun 09 Javascript
使用jquery动态加载Js文件和Css文件
Oct 24 Javascript
JavaScript在网页中画圆的函数arc使用方法
Nov 13 Javascript
网页中右键功能的实现方法之contextMenu的使用
Feb 20 Javascript
vue.js做一个简单的编辑菜谱功能
May 08 Javascript
微信小程序画布圆形进度条显示效果
Nov 17 Javascript
JavaScript模板引擎应用场景及实现原理详解
Dec 14 Javascript
vue scroll滚动判断的实现(是否滚动到底部、滚动方向、滚动节流、获取滚动区域dom元素)
Jun 11 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
浅谈PHP中的数据传输CURL
2016/09/06 PHP
jquery 学习笔记 传智博客佟老师附详细注释
2020/09/12 Javascript
基于jQuery的公告无限循环滚动实现代码
2012/05/11 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
2013/02/04 Javascript
将list转换为json失败的原因
2013/12/17 Javascript
IE6中链接A的href为javascript协议时不在当前页面跳转
2014/06/05 Javascript
jquery插件推荐浏览器嗅探userAgent
2014/11/09 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
JavaScript中的函数嵌套使用
2015/06/04 Javascript
JavaScript实现带箭头标识的多级下拉菜单效果
2015/08/27 Javascript
javascript瀑布流式图片懒加载实例
2020/06/28 Javascript
JavaScript数组迭代方法
2017/03/03 Javascript
vue中将网页打印成pdf实例代码
2017/06/15 Javascript
AngularJS实时获取并显示密码的方法
2018/02/06 Javascript
Vue.js 中的 v-cloak 指令及使用详解
2018/11/19 Javascript
微信小程序实现用table显示数据库反馈的多条数据功能示例
2019/05/07 Javascript
js获取 gif 的帧数的代码实例
2019/09/10 Javascript
JavaScript前端实现压缩图片功能
2020/03/06 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
[02:53]DOTA2亚洲邀请赛 NewBee战队巡礼
2015/02/03 DOTA
[01:11:08]Winstrike vs NB 2018国际邀请赛淘汰赛BO1 8.21
2018/08/22 DOTA
python利用正则表达式排除集合中字符的功能示例
2017/10/10 Python
TF-IDF与余弦相似性的应用(一) 自动提取关键词
2017/12/21 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python TF-IDF算法实现文本关键词提取
2019/05/29 Python
python基于json文件实现的gearman任务自动重启代码实例
2019/08/13 Python
python爬取2021猫眼票房字体加密实例
2021/02/19 Python
20佳惊艳的HTML5应用程序示例分享
2011/05/03 HTML / CSS
*p++ 自增p 还是p所指向的变量
2016/07/16 面试题
应届生污水处理求职信
2013/11/06 职场文书
计算机网络及管理学专业求职信
2014/06/05 职场文书
工作作风懒散检讨书
2014/10/29 职场文书
详解Java实现数据结构之并查集
2021/06/23 Java/Android
MySQL七种JOIN类型小结
2021/10/24 MySQL
电脑只能进入安全模式无法正常启动的解决办法
2022/04/08 数码科技