在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 相关文章推荐
Mootools 1.2教程 正则表达式
Sep 15 Javascript
Javascript学习笔记2 函数
Jan 11 Javascript
一个js的tab切换效果代码[代码分离]
Apr 11 Javascript
javascript动画之圆形运动,环绕鼠标运动作小球
Jul 20 Javascript
JavaScript DOM 编程艺术(第2版)读书笔记(JavaScript的最佳实践)
Oct 01 Javascript
JS 如何获取radio选中后的值及不选择取radio的值
Oct 28 Javascript
基于Node.js实现nodemailer邮件发送
Jan 26 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
Angular2中select用法之设置默认值与事件详解
May 07 Javascript
微信小程序中post方法与get方法的封装
Sep 26 Javascript
Angularjs Ng_repeat中实现复选框选中并显示不同的样式方法
Sep 12 Javascript
js实现移动端tab切换时下划线滑动效果
Sep 08 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
推荐几部必看的DC动画电影
2020/03/03 欧美动漫
虫族 Zerg 历史背景
2020/03/14 星际争霸
Zend Guard一些常见问题解答
2008/09/11 PHP
深入探讨<br />和 \r\n两者有什么区别??
2013/06/05 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
PHP实现对站点内容外部链接的过滤方法
2014/09/10 PHP
PHP面向对象程序设计之对象的遍历操作示例
2019/06/12 PHP
PHP常量DIRECTORY_SEPARATOR原理及用法解析
2020/11/10 PHP
js实现黑色简易的滑动门网页tab选项卡效果
2015/08/31 Javascript
jQuery+css实现的蓝色水平二级导航菜单效果代码
2015/09/11 Javascript
利用require.js与angular搭建spa应用的方法实例
2017/07/19 Javascript
js前端导出Excel的方法
2017/11/01 Javascript
vue实现自定义多选与单选的答题功能
2018/07/05 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
超详细动手搭建一个VuePress 站点及开启PWA与自动部署的方法
2019/01/27 Javascript
js原生map实现的方法总结
2020/01/19 Javascript
Vue js with语句原理及用法解析
2020/09/03 Javascript
[05:49]DOTA2-DPC中国联赛 正赛 Elephant vs LBZS 选手采访
2021/03/11 DOTA
python数据类型_字符串常用操作(详解)
2017/05/30 Python
Python实现的质因式分解算法示例
2018/05/03 Python
使用Flask集成bootstrap的方法
2018/07/24 Python
使用 Python 实现微信群友统计器的思路详解
2018/09/26 Python
numpy和pandas中数组的合并、拉直和重塑实例
2019/06/28 Python
python os.path.isfile 的使用误区详解
2019/11/29 Python
Python turtle画图库&amp;&amp;画姓名实例
2020/01/19 Python
TensorFlow keras卷积神经网络 添加L2正则化方式
2020/05/22 Python
用python监控服务器的cpu,磁盘空间,内存,超过邮件报警
2021/01/29 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
Why we need EJB
2016/10/20 面试题
毕业生自荐信的主要内容
2013/10/29 职场文书
小学新学期教师寄语
2014/01/18 职场文书
违反校纪校规检讨书
2014/02/15 职场文书
公证委托书大全
2014/04/04 职场文书
品牌转让协议书
2014/08/20 职场文书
HTML速写之Emmet语法规则的实现
2021/04/07 HTML / CSS