在jQuery中使用$而避免跟其它库产生冲突的方法


Posted in Javascript onAugust 13, 2015

在Jquery中,$是JQuery的别名,所有使用$的地方也都可以使用JQuery来替换,如$('#msg')等同于JQuery('#msg')的写法。然而,当我们引入多个js库后,在另外一个js库中也定义了$符号的话,那么我们在使用$符号时就发生了冲突。下面以引入两个库文件jquery.js和prototype.js为例来进行说明。
第一种情况:jquery.js在prototype.js之后进行引入,如:

<script src="prototype.js" type="text/javascript"/> <script src="jquery.js" type="text/javascript"/>
在这种情况下,我们在自己的js代码中如下写的话:

$('#msg').hide();

$永远代表的是jquery中定义的$符号,也可以写成JQuery('#msg').hide();如果想要使用prototype.js中定义的$,我们在后面再介绍。

第二种情况:jquery.js在prototype.js之前进行引入,如:

<script src="jquery.js" type="text/javascript"/>
 <script src="prototype.js" type="text/javascript"/>

在这种情况下,我们在自己的js代码中如下写的话:

$('#msg').hide();

$此时代表的prototype.js中定义的$符号,如果我们想要调用jquery.js中的工厂选择函数功能的话,只能用全称写法JQuery('#msg').hide().

下面先介绍在第一种引入js库文件顺序的情况下,如何正确的使用不同的js库中定义的$符号。

一.使用JQuery.noConflict()
该方法的作用就是让Jquery放弃对$的所有权,将$的控制权交还给prototype.js,因为jquery.js是后引入的,所以最后拥有$控制权的是jquery。它的返回值是JQuery。当在代码中调用了该 方法以后,我们就不可以使用$来调用jquery的方法了,此时$就代表在prototype.js库中定义的$了。如下:

JQuery.noConflict();//此处不可以再写成$('#msg').hide(),此时的$代表prototype.js中定义的$符号。 JQuey('#msg').hide();
自此以后$就代表prototype.js中定义的$,jquery.js中的$无法再使用,只能使用jquery.js中$的全称JQuery了。
将 jQuery 设置为 no-conflict 模式后,可以给$设置个别名:

<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>var $j = jQuery.noConflict();</script>

如果还想继续是用 jQuery 的$,需要将代码包含在一个自执行的函数内,这也是一些 jQuery 插件作者的通用做法,因为这些作者并不知道项目中是否引用了其它库:

<script src="prototype.js"></script>
<script src="jquery.js"></script>
<script>
jQuery.noConflict();

(function($) {
  // 这里依然可以继续使用 jQuery 的 $
})(jQuery);
</script>

二.自定义JQuery的别名
如果觉得第一种方法中使用了JQuery.noConflict()方法以后,只能使用JQuery全称比较麻烦的话,我们还可以为JQuery重定义别名。如下:

var $j=JQuery.noConflict(); $j('#msg').hide();//此处$j就代表JQuery

自此以后$就代表prototype.js中定义的$,jquey.js中的$无法再使用,只能使用$j来作为jquey.js中JQuery的别名了。


三.使用语句块,在语句块中仍然使用jquery.js中定义的$,如下:

JQuery.noConflict(); JQuery(document).ready(function($){ $('#msg').hide();
//此时在整个ready事件的方法中使用的$都是jquery.js中定义的$. });

或者使用如下语句块:

(function($){ ..... $('#msg').hide();//此时在这个语句块中使用的都是jquery.js中定义的$. })(JQuery)

如果在第二种引入js库文件顺序的情况下,如何使用jquery.js中的$,我们还是可以使用上面介绍的语句块的方法,如:

<script src="jquery.js" type="text/javascript"/> 
<script src="prototype.js" type="text/javascript"/> 
<script type="text/javascript"> 

(function($){ 
..... 
$('#msg').hide();//此时在这个语句块中使用的都是jquery.js中定义的$. 
})(JQuery) 
</script>

代码

<script src="jquery.js" type="text/javascript"/> 
<script src="prototype.js" type="text/javascript"/> 
<script type="text/javascript"> (function($){ ..... $('#msg').hide();
//此时在这个语句块中使用的都是jquery.js中定义的$. })(JQuery) </script>

这种使用语句块的方法非常有用,在我们自己写jquery插件时,应该都使用这种写法,因为我们不知道具体工作过程中是如何顺序引入各种js库的,而这种语句块的写法却能屏蔽冲突。

Javascript 相关文章推荐
javascript基础知识大集锦(一) 推荐收藏
Jan 13 Javascript
jquery实现省市select下拉框的替换(示例代码)
Feb 22 Javascript
在JavaScript中使用timer示例
May 08 Javascript
javascript显式类型转换实例分析
Apr 25 Javascript
js带缩略图的图片轮播效果代码分享
Sep 14 Javascript
js实现的星星评分功能函数
Dec 09 Javascript
javascript每日必学之条件分支
Feb 17 Javascript
BootStrap文件上传样式超好看【持续更新】
May 10 Javascript
javascript的理解及经典案例分析
May 20 Javascript
分析javascript中9 个常见错误阻碍你进步
Sep 18 Javascript
js数组去重的N种方法(小结)
Jun 07 Javascript
基于vue2的canvas时钟倒计时组件步骤解析
Nov 05 Javascript
再JavaScript的jQuery库中编写动画效果的指南
Aug 13 #Javascript
js实现仿网易点击弹出提示同时背景变暗效果
Aug 13 #Javascript
JavaScript生成SQL查询表单的方法
Aug 13 #Javascript
对于jQuery性能的一些优化建议
Aug 13 #Javascript
使用控制台破解百小度一个月只准改一次名字
Aug 13 #Javascript
js实现文本框宽度自适应文本宽度的方法
Aug 13 #Javascript
理解和运用JavaScript的闭包机制
Aug 13 #Javascript
You might like
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
PHP实现根据银行卡号判断银行
2015/04/29 PHP
怎样搭建PHP开发环境
2015/07/28 PHP
jquery中获取select选中值的代码
2011/06/27 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
JavaScript中String.prototype用法实例
2015/05/20 Javascript
javascript事件委托的方式绑定详解
2015/06/10 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
javascript实现很浪漫的气泡冒出特效
2020/09/05 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
Vue2.0利用 v-model 实现组件props双向绑定的优美解决方案
2017/03/13 Javascript
ES6中参数的默认值语法介绍
2017/05/03 Javascript
js+html5实现页面可刷新的倒计时效果
2017/07/15 Javascript
解决Angular2 router.navigate刷新页面的问题
2018/08/31 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
python求斐波那契数列示例分享
2014/02/14 Python
Python返回真假值(True or False)小技巧
2015/04/10 Python
Python中几种属性访问的区别与用法详解
2018/10/10 Python
Django 1.10以上版本 url 配置注意事项详解
2019/08/05 Python
Django admin 实现search_fields精确查询实例
2020/03/30 Python
python+opencv实现车道线检测
2021/02/19 Python
微信浏览器左上角返回按钮拦截功能
2017/11/21 HTML / CSS
基于IE10/HTML5 开发
2013/04/22 HTML / CSS
美国家具网站:Cymax
2016/09/17 全球购物
优衣库英国官网:UNIQLO英国
2016/12/25 全球购物
成品仓管员岗位职责
2013/12/11 职场文书
八年级历史教学反思
2014/01/10 职场文书
红旗团支部事迹材料
2014/01/27 职场文书
秸秆管理实施方案
2014/03/15 职场文书
专科应届毕业生求职信
2014/06/04 职场文书
优秀毕业生自荐信
2014/06/10 职场文书
大学生学雷锋活动总结
2014/06/26 职场文书
2015年环卫工作总结
2015/04/28 职场文书
工作态度恶劣检讨书
2015/05/06 职场文书
教你用Python写一个植物大战僵尸小游戏
2021/04/25 Python