在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 相关文章推荐
JS类定义原型方法的两种实现的区别评论很多
Sep 12 Javascript
InnerHtml和InnerText的区别分析
Mar 13 Javascript
jQuery学习笔记 操作jQuery对象 文档处理
Sep 19 Javascript
jQuery函数的等价原生函数代码示例
May 27 Javascript
JavaScript实现的图像模糊算法代码分享
Apr 22 Javascript
jQuery实现平滑滚动到指定锚点的方法
Mar 20 Javascript
jquery表格datatables实例解析 直接加载和延迟加载
Aug 12 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
Vue学习笔记进阶篇之vue-cli安装及介绍
Jul 18 Javascript
Vue父子模版传值及组件传值的三种方法
Nov 27 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
解决Can't find variable: SockJS vue项目的问题
Sep 22 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利用反射实现插件机制的方法
2015/03/14 PHP
使用php转义输出HTML到JavaScript
2015/03/27 PHP
php去掉文件前几行的方法
2015/07/29 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
CodeIgniter视图使用注意事项
2016/01/20 PHP
PHP随机数 C扩展随机数
2016/05/04 PHP
JavaScript confirm选择判断
2008/10/18 Javascript
JS上传图片前的限制包括(jpg jpg gif及大小高宽)等
2012/12/19 Javascript
js下将阿拉伯数字每三位一逗号分隔(如:15000000转化为15,000,000)
2014/06/02 Javascript
Javascript中typeof 用法小结
2015/05/12 Javascript
jQuery formValidator表单验证
2016/01/07 Javascript
jquery获取input type=text中的值的各种方式(总结)
2016/12/02 Javascript
ajax实现动态下拉框示例
2017/01/10 Javascript
JS中Array数组学习总结
2017/01/18 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
js中apply与call简单用法详解
2017/11/06 Javascript
JavaScript 判断对象中是否有某属性的常用方法
2018/06/14 Javascript
详解Next.js页面渲染的优化方案
2019/01/27 Javascript
js实现窗口全屏示例详解
2019/09/17 Javascript
微信小程序实现打开并下载服务器上面的pdf文件到手机
2019/09/20 Javascript
Vue $emit()不能触发父组件方法的原因及解决
2020/07/28 Javascript
JS实现4位随机验证码
2020/10/19 Javascript
Python中Collection的使用小技巧
2014/08/18 Python
Python中Django发送带图片和附件的邮件
2017/03/31 Python
python 网络编程详解及简单实例
2017/04/25 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
Python设计模式之模板方法模式实例详解
2019/01/17 Python
python pexpect ssh 远程登录服务器的方法
2019/02/14 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
2020/03/02 Python
css3实现文字扫光渐变动画效果的示例
2017/11/07 HTML / CSS
纯css3实现思维导图样式示例
2018/11/01 HTML / CSS
html5设计原理(推荐收藏)
2014/05/17 HTML / CSS
党的群众路线教育实践活动心得体会
2014/03/03 职场文书
小学班主任培训方案
2014/06/04 职场文书
2015少先队大队辅导员工作总结
2015/07/24 职场文书
浅谈python数据类型及其操作
2021/05/25 Python