如何解决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 相关文章推荐
限制文本框输入N个字符的js代码
May 13 Javascript
js数字转换为float,取N位小数
Feb 08 Javascript
使用JQ来编写最基本的淡入淡出效果附演示动画
Oct 31 Javascript
jQuery实现自定义下拉列表
Jan 05 Javascript
扩展jquery easyui tree的搜索树节点方法(推荐)
Oct 28 Javascript
jquery uploadify如何取消已上传成功文件
Feb 08 Javascript
JS验证字符串功能
Feb 22 Javascript
JS+DIV实现的卷帘效果示例
Mar 22 Javascript
Vue 2.0学习笔记之使用$refs访问Vue中的DOM
Dec 19 Javascript
Vue 实现树形视图数据功能
May 07 Javascript
浅谈webpack构建工具配置和常用插件总结
May 11 Javascript
React实现评论的添加和删除
Oct 20 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
解决微信授权回调页面域名只能设置一个的问题
2016/12/11 PHP
PHP实现对数组分页处理实例详解
2017/02/07 PHP
JS中style属性
2006/10/11 Javascript
JQuery开发的数独游戏代码
2010/10/29 Javascript
javascript的数组和常用函数详解
2014/05/09 Javascript
js设置控件的隐藏与显示的两种方法
2014/08/21 Javascript
jquery判断复选框是否被选中的方法
2015/10/16 Javascript
jQuery实现的鼠标滑过弹出放大图片特效
2016/01/08 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
AngularJS的脏检查深入分析
2017/04/22 Javascript
Angularjs的键盘事件的绑定
2017/07/27 Javascript
react.js使用webpack搭配环境的入门教程
2017/08/14 Javascript
jQuery实现炫丽的3d旋转星空效果
2018/07/04 jQuery
vue实现简单的星级评分组件源码
2018/11/16 Javascript
微信小程序如何实现全局重新加载
2019/06/05 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
python中实现迭代器(iterator)的方法示例
2017/01/19 Python
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
解决Python下json.loads()中文字符出错的问题
2018/12/19 Python
Python实战购物车项目的实现参考
2019/02/20 Python
Python datetime和unix时间戳之间相互转换的讲解
2019/04/01 Python
PyQt5连接MySQL及QMYSQL driver not loaded错误解决
2020/04/29 Python
一文解决django 2.2与mysql兼容性问题
2020/07/15 Python
Python实现画图软件功能方法详解
2020/07/28 Python
python实现mask矩阵示例(根据列表所给元素)
2020/07/30 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
HTML5教程之html 5 本地数据库(Web Sql Database)
2014/04/03 HTML / CSS
浅析HTML5页面元素及属性
2021/01/20 HTML / CSS
激光脱毛、蓝光和护肤:Tria Beauty
2019/03/28 全球购物
《赠汪伦》教学反思
2014/04/12 职场文书
婚前协议书怎么写
2014/04/15 职场文书
政府采购方案
2014/06/12 职场文书
新闻编辑专业自荐信
2014/07/02 职场文书
小学语文教学随笔
2015/08/14 职场文书
中国梦宣传标语口号
2015/12/26 职场文书
一封真诚的自荐信帮你赢得机会
2019/05/07 职场文书