如何解决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 相关文章推荐
javascript学习笔记(一) 在html中使用javascript
Jun 18 Javascript
通过遮罩层实现浮层DIV登录的js代码
Feb 07 Javascript
DOM基础教程之使用DOM + Css
Jan 20 Javascript
js实现鼠标划过给div加透明度的方法
May 25 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
JS使用正则表达式除去字符串中重复字符的方法
Nov 05 Javascript
jQuery.cookie.js使用方法及相关参数解释
Mar 06 Javascript
JavaScript制作简单的框选图表
May 15 Javascript
Element UI框架中巧用树选择器的实现
Dec 12 Javascript
JavaScript实现拖拽功能
Feb 11 Javascript
Vue Object.defineProperty及ProxyVue实现双向数据绑定
Sep 02 Javascript
Vue 的 v-model用法实例
Nov 23 Vue.js
异步动态加载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数组保存文本与文本反编成数组实例
2014/11/13 PHP
使用纯php代码实现页面伪静态的方法
2015/07/25 PHP
PHP如何通过date() 函数格式化显示时间
2020/11/13 PHP
WordPress伪静态规则设置代码实例
2020/12/10 PHP
javascript 放大镜效果js组件 qsoft.PopBigImage.v0.35 加入了chrome支持
2009/04/07 Javascript
需要做特殊处理的DOM元素属性的访问
2010/11/05 Javascript
js的压缩及jquery压缩探讨(提高页面加载性能/保护劳动成果)
2013/01/29 Javascript
jQuery实现类似滑动门切换效果的层切换
2013/09/23 Javascript
使用javascript实现简单的选项卡切换
2015/01/09 Javascript
BootStrap学习笔记之nav导航栏和面包屑导航
2017/01/03 Javascript
vue.js指令和组件详细介绍及实例
2017/04/06 Javascript
JavaScript实现form表单的多文件上传
2020/03/27 Javascript
如何让你的JS代码更好看易读
2017/12/01 Javascript
JS函数节流和函数防抖问题分析
2017/12/18 Javascript
Vue实现导航栏点击当前标签变色功能
2020/08/19 Javascript
回顾Javascript React基础
2019/06/15 Javascript
基于jQuery实现可编辑的表格
2019/12/11 jQuery
微信小程序全选多选效果实现代码解析
2020/01/21 Javascript
Vue项目前后端联调(使用proxyTable实现跨域方式)
2020/07/18 Javascript
vue中element 的upload组件发送请求给后端操作
2020/09/07 Javascript
python读取Android permission文件
2013/11/01 Python
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Django 使用logging打印日志的实例
2018/04/28 Python
在PyCharm中控制台输出日志分层级分颜色显示的方法
2019/07/11 Python
python与C、C++混编的四种方式(小结)
2019/07/15 Python
关于windows下Tensorflow和pytorch安装教程
2020/02/04 Python
python使用yaml 管理selenium元素的示例
2020/12/01 Python
一款纯css3实现的非常实用的鼠标悬停特效演示
2014/11/05 HTML / CSS
amazeui模态框弹出后立马消失并刷新页面
2020/08/19 HTML / CSS
Original Penguin英国官方网站:美国著名休闲时装品牌
2016/10/30 全球购物
草莓网化妆品日本站:Strawberrynet日本
2017/10/20 全球购物
护士自荐信
2013/10/25 职场文书
先进学校事迹材料
2014/12/30 职场文书
2015年污水处理厂工作总结
2015/05/26 职场文书
2019大学生实习报告
2019/06/21 职场文书
Python基础之函数嵌套知识总结
2021/05/23 Python