在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 相关文章推荐
使用TextRange获取输入框中光标的位
Oct 14 Javascript
检测是否已安装 .NET Framework 3.5的js脚本
Feb 14 Javascript
Javascript isArray 数组类型检测函数
Oct 08 Javascript
Javascript实现返回上一页面并刷新的小例子
Dec 11 Javascript
firefox下jquery ajax返回object XMLDocument处理方法
Jan 26 Javascript
jQuery获取样式中颜色值的方法
Jan 29 Javascript
基于JavaScript实现熔岩灯效果导航菜单
Jan 04 Javascript
JavaScript面向对象中接口实现方法详解
Jul 24 Javascript
Vue CLI项目 axios模块前后端交互的使用(类似ajax提交)
Sep 01 Javascript
vue使用showdown并实现代码区域高亮的示例代码
Oct 17 Javascript
微信小程序request请求封装,验签代码实例
Dec 04 Javascript
JavaScript实现动态留言板
Mar 16 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版(3)
2006/10/09 PHP
PHP Zip解压 文件在线解压缩的函数代码
2010/05/26 PHP
php基于自定义函数记录log日志方法
2017/07/21 PHP
基于jquery的图片懒加载js
2010/06/30 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
2013/12/24 Javascript
jquery序列化form表单使用ajax提交后处理返回的json数据
2014/03/03 Javascript
thinkphp中常用的系统常量和系统变量
2014/03/05 Javascript
js与jquery回车提交的方法
2015/02/03 Javascript
Jquery搜索父元素操作方法
2015/02/10 Javascript
Javascript实现图片轮播效果(一)让图片跳动起来
2016/02/17 Javascript
JQuery Mobile 弹出式登录框的实现方法
2016/05/28 Javascript
JS实现的系统调色板完整实例
2016/12/21 Javascript
Vue系列:通过vue-router如何传递参数示例
2017/01/16 Javascript
Map.vue基于百度地图组件重构笔记分享
2017/04/17 Javascript
jquery点赞功能实现代码 点个赞吧!
2020/05/29 jQuery
简单理解Vue中的nextTick方法
2018/01/30 Javascript
js实现登录拖拽窗口
2020/02/10 Javascript
three.js着色器材质的内置变量示例详解
2020/08/16 Javascript
antd vue table跨行合并单元格,并且自定义内容实例
2020/10/28 Javascript
解决Python的str强转int时遇到的问题
2018/04/09 Python
使用python将时间转换为指定的格式方法
2018/11/12 Python
使用python+whoosh实现全文检索
2019/12/09 Python
python GUI库图形界面开发之PyQt5不规则窗口实现与显示GIF动画的详细方法与实例
2020/03/09 Python
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
.net软件工程师面试题
2015/03/31 面试题
期末总结的个人自我评价
2013/11/02 职场文书
工厂厂长岗位职责
2013/11/08 职场文书
关于祖国的演讲稿
2014/05/04 职场文书
经营目标管理责任书
2014/07/25 职场文书
个人违纪检讨书
2014/09/15 职场文书
授权委托书(公民个人适用)
2014/09/19 职场文书
营业员岗位职责范本
2015/04/14 职场文书
幼儿园大班开学寄语(2015秋季)
2015/05/27 职场文书
小学科学课教学反思
2016/02/23 职场文书
祝福语集锦:给妹妹结婚的祝福语
2019/12/18 职场文书
SpringBoot2零基础到精通之异常处理与web原生组件注入
2022/03/22 Java/Android