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 相关文章推荐
jQuery图片的展开和收缩实现代码
Apr 16 Javascript
JavaScript使用RegExp进行正则匹配的方法
Jul 11 Javascript
jquery实现可横向和竖向展开的动态下滑菜单效果
Aug 24 Javascript
学习JavaScript设计模式之状态模式
Jan 08 Javascript
jQuery实现元素的插入
Feb 27 Javascript
移动端使用localResizeIMG4压缩图片
Apr 22 Javascript
pm2 部署 node的三种方法示例
Oct 20 Javascript
vue路由拦截及页面跳转的设置方法
May 24 Javascript
vue 项目接口管理的实现
Jan 17 Javascript
js实现单元格拖拽效果
Feb 10 Javascript
从零使用TypeScript开发项目打包发布到npm
Feb 14 Javascript
利用node.js开发cli的完整步骤
Dec 29 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
PHP中的traits简单使用实例
2015/05/13 PHP
PHP验证码生成原理和实现
2016/01/24 PHP
PHP+原生态ajax实现的省市联动功能详解
2017/08/15 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
修改Laravel自带的认证系统的User类的命名空间的步骤
2019/10/15 PHP
JavaScript让IE浏览器event对象符合W3C DOM标准
2009/11/24 Javascript
javascript拓展DOM操作 prependChild insertAfert
2010/11/17 Javascript
javascript学习笔记(十一) 正则表达式介绍
2012/06/20 Javascript
js下拉框二级关联菜单效果代码具体实现
2013/08/03 Javascript
js使用removeChild方法动态删除div元素
2014/08/01 Javascript
javascript中parseInt()函数的定义和用法分析
2014/12/20 Javascript
JS继承用法实例分析
2015/02/05 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
一步步教大家编写酷炫的导航栏js+css实现
2016/03/14 Javascript
很棒的js选项卡切换效果
2016/07/15 Javascript
BootStrap Fileinput初始化时的一些参数
2016/12/30 Javascript
BootStrap 弹出层代码
2017/02/09 Javascript
JS获取本周周一,周末及获取任意时间的周一周末功能示例
2017/02/09 Javascript
JS实现动态修改table及合并单元格的方法示例
2017/02/20 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
Vue程序调试的方法
2019/06/17 Javascript
vue 实现微信浮标效果
2019/09/01 Javascript
vuex+axios+element-ui实现页面请求loading操作示例
2020/02/02 Javascript
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python3基于sax解析xml操作示例
2018/05/22 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
Python类和实例的属性机制原理详解
2020/03/21 Python
django实现模型字段动态choice的操作
2020/04/01 Python
pycharm-professional-2020.1下载与激活的教程
2020/09/21 Python
HTML5 video视频字幕的使用和制作方法
2018/05/03 HTML / CSS
仪器仪表检测毕业生自荐信
2013/10/31 职场文书
《美丽的彩虹》教学反思
2014/02/25 职场文书
党支部对照检查材料
2014/08/25 职场文书
优秀共产党员推荐材料
2014/12/18 职场文书
垂直极限观后感
2015/06/08 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python