如何解决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 面包屑导航 具体实现
Jun 05 Javascript
详细介绍8款超实用JavaScript框架
Oct 25 Javascript
js触发select onchange事件的小技巧
Aug 05 Javascript
javascript实现的简单的表单验证
Jul 10 Javascript
Javascript小技能总结(推荐)
Jun 02 Javascript
jQuery实现动态文字搜索功能
Jan 05 Javascript
AngularJS实现使用路由切换视图的方法
Jan 24 Javascript
JavaScript设计模式之策略模式详解
Jun 09 Javascript
解决vue router使用 history 模式刷新后404问题
Jul 19 Javascript
Vuex 进阶之模块化组织详解
Jan 12 Javascript
vue填坑之webpack run build 静态资源找不到的解决方法
Sep 03 Javascript
js实现每日签到功能
Nov 29 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 adodb连接mssql解决乱码问题
2009/06/12 PHP
关于Appserv无法打开localhost问题的解决方法
2009/10/16 PHP
php后台如何避免用户直接进入方法实例
2013/10/15 PHP
Yii2框架数据库简单的增删改查语法小结
2016/08/31 PHP
Smarty模板常见的简单应用分析
2016/11/15 PHP
php将从数据库中获得的数据转换成json格式并输出的方法
2018/08/21 PHP
javascript随机之洗牌算法深入分析
2014/06/07 Javascript
JavaScript使用setInterval()函数实现简单轮询操作的方法
2015/02/02 Javascript
概述jQuery中的ajax方法
2016/12/16 Javascript
详解如何让Express支持async/await
2017/10/09 Javascript
详解IWinter 一个路由转控制器的 Nodejs 库
2017/11/15 NodeJs
微信小程序仿RadioGroup改变样式的处理方案
2018/07/13 Javascript
浅谈vue同一页面中拥有两个表单时,的验证问题
2018/09/18 Javascript
一份超级详细的Vue-cli3.0使用教程【推荐】
2018/11/15 Javascript
解决vue单页面 回退页面 keeplive 缓存问题
2020/07/22 Javascript
在vue中动态修改css其中一个属性值操作
2020/12/07 Vue.js
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
详解Python中where()函数的用法
2018/03/27 Python
Python多线程原理与用法详解
2018/08/20 Python
python实现梯度下降算法
2020/03/24 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python集合删除多种方法详解
2020/02/10 Python
Python文件读写w+和r+区别解析
2020/03/26 Python
python使用smtplib模块发送邮件
2020/12/17 Python
do you have any Best Practice for testing
2016/06/04 面试题
旅游管理本科生求职信
2013/10/14 职场文书
网页设计个人找工作求职信
2013/11/28 职场文书
九年级数学教学反思
2014/02/02 职场文书
《乡愁》教学反思
2014/02/18 职场文书
文明市民先进事迹
2014/05/15 职场文书
英语专业毕业生求职信
2014/05/24 职场文书
小学总务工作总结
2015/08/13 职场文书
学习计划是什么
2019/04/30 职场文书
七年级作文之冬景
2019/11/07 职场文书
MySQL 中如何归档数据的实现方法
2022/03/16 SQL Server
使用Django框架创建项目
2022/06/10 Python