在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 相关文章推荐
jQuery UI Dialog 创建友好的弹出对话框实现代码
Apr 12 Javascript
jQuery is()函数用法3例
May 06 Javascript
jQuery中outerHeight()方法用法实例
Jan 19 Javascript
jquery siblings获取同辈元素用法实例分析
Jul 25 Javascript
JS生成一维码(条形码)功能示例
Jan 19 Javascript
JavaScript编写九九乘法表(两种任选)
Feb 04 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
Jun 17 Javascript
AngularJS使用ui-route实现多层嵌套路由的示例
Jan 10 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
微信小程序配置服务器提示验证token失败的解决方法
Apr 03 Javascript
JS动态显示倒计时效果
Dec 12 Javascript
node.js使用yargs处理命令行参数操作示例
Feb 11 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中“简单工厂模式”实例代码讲解
2012/09/04 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP+jQuery 注册模块开发详解
2014/10/14 PHP
WordPress中用于获取搜索表单的PHP函数使用解析
2016/01/05 PHP
详解PHP中array_rand函数的使用方法
2016/09/11 PHP
php加密解密字符串示例
2016/10/13 PHP
Js之软键盘实现(js源码)
2007/01/30 Javascript
jQuery 性能优化手册 推荐
2010/02/23 Javascript
jquery常用技巧及常用方法列表集合
2011/04/06 Javascript
强大的jquery插件jqeuryUI做网页对话框效果!简单
2011/04/14 Javascript
jQuery$命名冲突怎么办如何解决
2014/01/16 Javascript
js获取时间并实现字符串和时间戳之间的转换
2015/01/05 Javascript
JavaScript动态修改网页元素内容的方法
2015/03/21 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
2015/08/24 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
jQuery progressbar通过Ajax请求实现后台进度实时功能
2016/10/11 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
浅谈webpack性能榨汁机(打包速度优化)
2019/01/09 Javascript
JS如何判断对象是否包含某个属性
2020/08/29 Javascript
python实现通过pil模块对图片格式进行转换的方法
2015/03/24 Python
json跨域调用python的方法详解
2017/01/11 Python
python 脚本生成随机 字母 + 数字密码功能
2018/05/26 Python
PyQt5通信机制 信号与槽详解
2019/08/07 Python
在keras中获取某一层上的feature map实例
2020/01/24 Python
使用python实现CGI环境搭建过程解析
2020/04/28 Python
Python flask框架实现查询数据库并显示数据
2020/06/04 Python
Jimmy Choo美国官网:周仰杰鞋子品牌
2018/06/08 全球购物
美国专业消费电子及摄影器材网站:B&H Photo Video
2019/12/18 全球购物
自考生毕业自我鉴定
2013/10/10 职场文书
建筑学推荐信
2013/11/03 职场文书
500字小学生检讨书
2015/02/19 职场文书
英语读书笔记
2015/07/02 职场文书
2016春季校长开学典礼致辞
2015/11/26 职场文书
python 中yaml文件用法大全
2021/07/04 Python
Python图像处理库PIL详细使用说明
2022/04/06 Python