在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 相关文章推荐
extjs之去除s.gif的影响
Dec 25 Javascript
javascript学习基础笔记之DOM对象操作
Nov 03 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
JavaScript获得url查询参数的方法
Jul 02 Javascript
原生JS取代一些JQuery方法的简单实现
Sep 20 Javascript
快速解决js中window.location.href不工作的问题
Nov 02 Javascript
vue实现ajax滚动下拉加载,同时具有loading效果(推荐)
Jan 11 Javascript
ES6中的箭头函数实例详解
Apr 06 Javascript
React-Native 组件之 Modal的使用详解
Aug 08 Javascript
jQuery发请求传输中文参数乱码问题的解决方案
May 22 jQuery
通过GASP让vue实现动态效果实例代码详解
Nov 24 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
Nov 03 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+MySQL5.0中文乱码解决方法
2006/11/20 PHP
php加密解密字符串示例
2016/10/13 PHP
Yii框架响应组件用法实例分析
2019/09/04 PHP
PHP中类与对象功能、用法实例解读
2020/03/27 PHP
JavaScript的面向对象(一)
2006/11/09 Javascript
javascript Xml增删改查(IE下)操作实现代码
2009/01/30 Javascript
33个优秀的jQuery 教程分享(幻灯片、动画菜单)
2011/07/08 Javascript
浅谈页面装载js及性能分析方法
2014/12/09 Javascript
详谈javascript中DOM的基本属性
2015/02/26 Javascript
第四章之BootStrap表单与图片
2016/04/25 Javascript
全面了解JS中的匿名函数
2016/06/29 Javascript
jQuery回到顶部的代码
2016/07/09 Javascript
浅谈javascript中关于日期和时间的基础知识
2016/07/13 Javascript
canvas绘制环形进度条
2017/02/23 Javascript
jQuery 实现图片的依次加载图片功能
2017/07/06 jQuery
swiper移动端轮播插件(触碰图片之后停止轮播)
2017/12/28 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
浅谈Node 调试工具入门教程
2018/03/20 Javascript
vsCode安装使用教程和插件安装方法
2020/08/24 Javascript
原生js实现each方法实例代码详解
2019/05/27 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
2019/12/04 Javascript
js实现蒙版效果
2020/01/11 Javascript
vue移动端下拉刷新和上滑加载
2020/10/27 Javascript
python实现的多线程端口扫描功能示例
2017/01/21 Python
多个应用共存的Django配置方法
2018/05/30 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
Python从函数参数类型引出元组实例分析
2019/05/28 Python
python如何遍历指定路径下所有文件(按按照时间区间检索)
2020/09/14 Python
纯CSS实现右侧底部悬浮效果(悬浮QQ、微信、微博、邮箱等联系方式)
2015/04/24 HTML / CSS
美国最大的无人机经销商:DroneNerds
2018/03/20 全球购物
社区国庆节活动方案
2014/02/05 职场文书
审计专业自荐信范文
2014/04/21 职场文书
励志演讲稿200字
2014/08/21 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
致创业的您:这类人不适合餐饮创业
2019/08/19 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang