jQuery解决$符号命名冲突


Posted in Javascript onJune 18, 2016

前些天朋友让我帮他解决一个页面中jquery特效的兼容性问题,觉得这是一个很容易忽略也很重要的一点,特在此记录一下。

朋友给的页面中用到了三个特效,其中两个特效可以显示,第三个没有效果。通过查看引用的js文件,我发现页面中不光引入了jquery.js,还引入了一个名为prototype.js的文件。 这个prototype.js之前未曾听说过,特意在百度上搜了一下,原来它也是一个js类库,功能和jquery差不多,而且很强大。

通过一点点的排查,我发现那两个可以显示的特效引用的是jquery,而不显示的那个特效引用的是这个prototype.js。 稍一分析,终于找到了出错的关键:jquery中的$和prototype.js中的$冲突了,两个类库中都是通过$符号来调用,然而如果直接这样写的话就会不知道这个$是属于谁的,该调用哪个类库中的方法来实现特效的显示。

既然找到了问题的根结所在,那这个问题也就好解决了。

方法一:在jquery中,有这样一段代码:

// Expose jQuery to the global object

window.jQuery = window.$ = jQuery;

也就是说,我们可以通过jQuery来代替jquery.js中的$符号进行调用,前提必须声明一下:

jQuery = $;

那,新的问题又出现了。页面中有那么多地方用到了$,我不仅要区分到底哪些$是属于jquery的,还要将这些$替换成jQuery这个单词,更严重的是,如果该页面中要增加新的jquery特效,我还要时刻的提醒自己,调用$的时候要用jQuery来代替,稍一疏忽,不仅出不来想要的效果,而且修改起来也是一个大工作量的任务。看来,这种方法是行不通的。

难道就没有一个一劳永逸的方法可以将这个$的"归属权"给明确的区分出来吗?办法当然是有的!

方法二:使用jquery语句块来实现:

首先,来看一下jquery语句块的格式:

(function($){ 
 ..... 
 $('#msg').show();//此时在这个语句块中使用的都是jquery.js中定义的$. 

})(JQuery)

这样,我们在调用jquery中的$实现特效显示时,只要把这段代码写在这个语句块中,$符号该怎么调用还怎么调用。而prototype.js中的$写在语句块外,$符号也是该怎么调用怎么调用,两者根本不会产生什么影响了。

以上就是本文的全部内容,希望这个方法也能给遇到相同问题的其他人带来帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js类 from qq
Nov 13 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
Jan 27 Javascript
JS获取节点的兄弟,父级,子级元素的方法
Jan 09 Javascript
jquery的幻灯片图片切换效果代码分享
Sep 07 Javascript
Extjs 点击复选框在表格中增加相关信息行
Jul 12 Javascript
yii form 表单提交之前JS在提交按钮的验证方法
Mar 15 Javascript
bootstrap表单示例代码分享
May 18 Javascript
利用JavaScript对中文(汉字)进行排序实例详解
Jun 18 Javascript
React Native之ListView实现九宫格效果的示例
Aug 02 Javascript
微信小程序实现tab切换效果
Nov 21 Javascript
在vue2.0中引用element-ui组件库的方法
Jun 21 Javascript
Vue父组件监听子组件生命周期
Sep 03 Javascript
prototype.js常用函数详解
Jun 18 #Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
Jun 18 #Javascript
Javascript中prototype的使用详解
Jun 18 #Javascript
jQuery无刷新上传之uploadify3.1简单使用
Jun 18 #Javascript
jQuery插件uploadify实现ajax效果的图片上传
Jun 18 #Javascript
JavaScript的this关键字的理解
Jun 18 #Javascript
jquery+ajax实现直接提交表单实例分析
Jun 17 #Javascript
You might like
PHP5中的this,self和parent关键字详解教程
2007/03/19 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
2020/02/21 PHP
通过PHP实现用户注册后邮箱验证激活
2020/11/10 PHP
BOOM vs RR BO5 第二场 2.14
2021/03/10 DOTA
EXT窗口Window及对话框MessageBox
2011/01/27 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
js实现图片和链接文字同步切换特效的方法
2015/02/20 Javascript
JS 作用域与作用域链详解
2015/04/07 Javascript
Bootstrap优化站点资源、响应式图片、传送带使用详解3
2016/10/14 Javascript
利用jQuery插件imgAreaSelect实现图片上传裁剪(同步显示图像位置信息)
2016/12/02 Javascript
js 轮播效果实例分享
2016/12/28 Javascript
详解webpack2+React 实例demo
2017/09/11 Javascript
vue插件mescroll.js实现移动端上拉加载和下拉刷新
2019/03/07 Javascript
原生JS实现动态添加新元素、删除元素方法
2019/05/05 Javascript
使用layui的router来进行传参的实现方法
2019/09/06 Javascript
使用纯前端JavaScript实现Excel导入导出方法过程详解
2020/08/07 Javascript
[05:31]DOTA2英雄梦之声_第04期_光之守卫
2014/06/23 DOTA
教你如何将 Sublime 3 打造成 Python/Django IDE开发利器
2014/07/04 Python
python编码总结(编码类型、格式、转码)
2016/07/01 Python
在python的类中动态添加属性与生成对象
2016/09/17 Python
使用PyV8在Python爬虫中执行js代码
2017/02/16 Python
python requests 使用快速入门
2017/08/31 Python
Python程序员面试题 你必须提前准备!(答案及解析)
2018/01/23 Python
python绘图模块matplotlib示例详解
2019/07/26 Python
python3正则模块re的使用方法详解
2020/02/11 Python
墨西哥巴士车票在线购买:ClickBus
2018/03/27 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
全球性的女装店:storets
2019/06/12 全球购物
介绍一下如何利用路径遍历进行攻击及如何防范
2014/01/19 面试题
高二生物教学反思
2014/01/27 职场文书
食堂采购员岗位职责
2014/03/17 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
保洁员岗位职责
2015/02/04 职场文书
vue-cropper组件实现图片切割上传
2021/05/27 Vue.js
MySQL数据库 安全管理
2022/05/06 MySQL