在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 相关文章推荐
setTimeout和setInterval的浏览器兼容性分析
Feb 27 Javascript
js实现特定位取反原理及示例
Jun 30 Javascript
原生js和jquery分别实现横向导航菜单效果
May 13 Javascript
javascript表单控件实例讲解
Sep 13 Javascript
jQuery实现自动调用和触发某个事件的方法
Nov 18 Javascript
原生JavaScript实现AJAX、JSONP
Feb 07 Javascript
详解Vue文档中几个易忽视部分的剖析
Mar 24 Javascript
基于VuePress 轻量级静态网站生成器的实现方法
Apr 17 Javascript
vue 组件销毁并重置的实现
Jan 13 Javascript
通过实例了解Javascript柯里化流程
Mar 03 Javascript
Vue-resource安装过程及使用方法解析
Jul 21 Javascript
解决vue项目,npm run build后,报路径错的问题
Aug 13 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
咖啡因含量是由谁决定的?低因咖啡怎么来?低因咖啡适合什么人喝
2021/03/06 新手入门
PHP的范围解析操作符(::)的含义分析说明
2011/07/03 PHP
如何阻止网站被恶意反向代理访问(防网站镜像)
2014/03/18 PHP
php实现多维数组中每个单元值(数字)翻倍的方法
2015/02/16 PHP
PHP计算加权平均数的方法
2015/07/16 PHP
PHP中检索字符串的方法分析【strstr与substr_count方法】
2017/02/17 PHP
php实现表单提交上传文件功能
2018/05/28 PHP
JavaScript中null与undefined分析
2009/07/25 Javascript
jquery div 居中技巧应用介绍
2012/11/24 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
js使用ajax读博客rss示例
2014/05/06 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
nodejs+express实现文件上传下载管理网站
2017/03/15 NodeJs
jQuery插件之validation插件
2017/03/29 jQuery
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
[46:50]Liquid vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python实现端口转发器的方法
2015/03/13 Python
Python使用Flask框架同时上传多个文件的方法
2015/03/21 Python
使用Python对Csv文件操作实例代码
2017/05/12 Python
Python正则表达式和re库知识点总结
2019/02/11 Python
Django 项目重命名的实现步骤解析
2019/08/14 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
基于tensorflow for循环 while循环案例
2020/06/30 Python
美国受欢迎的眼影品牌:BH Cosmetics
2016/10/25 全球购物
Lacoste澳大利亚官网:服装、鞋类及配饰
2018/11/14 全球购物
Spongelle官网:美国的创意护肤洗护品牌
2019/05/15 全球购物
英国泽西岛植物:Jersey Plants Direct
2019/08/07 全球购物
求职简历自荐信
2013/10/20 职场文书
教师个人鉴定材料
2014/02/08 职场文书
技术合作协议书范本
2014/04/18 职场文书
小学开学标语
2014/07/01 职场文书
毕业论文指导教师评语
2014/12/30 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
初中运动会闭幕词范本3篇
2019/12/09 职场文书
解决Pytorch dataloader时报错每个tensor维度不一样的问题
2021/05/28 Python
浅谈JavaScript浅拷贝和深拷贝
2021/11/07 Javascript