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 相关文章推荐
javascript检测浏览器flash版本的实现代码
Dec 06 Javascript
javascript中解析四则运算表达式的算法和示例
Aug 11 Javascript
js实现飞入星星特效代码
Oct 17 Javascript
jQuery插件扩展操作入门示例
Jan 16 Javascript
原生js实现类似fullpage的单页/全屏滚动
Jan 22 Javascript
jquery代码规范让代码越来越好看
Feb 03 Javascript
Vue下的国际化处理方法
Dec 18 Javascript
vuex操作state对象的实例代码
Apr 25 Javascript
Vue框架下引入ActiveX控件的问题解决
Mar 25 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
Aug 20 Javascript
解决layui-open关闭自身窗口的问题
Sep 10 Javascript
ztree+ajax实现文件树下载功能
May 18 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数组函数序列之array_key_exists() - 查找数组键名是否存在
2011/10/29 PHP
php获取字段名示例分享
2014/03/03 PHP
PHP图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
php防止恶意刷新与刷票的方法
2014/11/21 PHP
JS高级笔记
2011/07/13 Javascript
JavaScript学习笔记(二) js对象
2011/10/25 Javascript
ASP.NET jQuery 实例6 (实现CheckBoxList成员全选或全取消)
2012/01/13 Javascript
将input file的选择的文件清空的两种解决方案
2013/10/21 Javascript
javascript日期格式化示例分享
2014/03/05 Javascript
jQuery中attr()方法用法实例
2015/01/05 Javascript
jquery+ajax实现跨域请求的方法
2015/01/20 Javascript
JavaScript数据类型之基本类型和引用类型的值
2015/04/01 Javascript
javascript顺序加载图片的方法
2015/07/18 Javascript
实例讲解jquery中mouseleave和mouseout的区别
2016/02/17 Javascript
Node.js环境下编写爬虫爬取维基百科内容的实例分享
2016/06/12 Javascript
AngularJS 中文API参考手册
2016/07/28 Javascript
浅析script标签中的defer与async属性
2016/11/30 Javascript
jQuery UI制作选项卡(tabs)
2016/12/13 Javascript
妙用缓存调用链实现JS方法的重载
2018/04/30 Javascript
JavaScript 中的 this 工作原理
2018/06/20 Javascript
Vuejs+vue-router打包+Nginx配置的实例
2018/09/20 Javascript
javascript实现前端input密码输入强度验证
2020/06/24 Javascript
javascript实现雪花飘落效果
2020/08/19 Javascript
使用Python进行稳定可靠的文件操作详解
2013/12/31 Python
深入讲解Python中的迭代器和生成器
2015/10/26 Python
python django 实现验证码的功能实例代码
2017/05/18 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
pandas 读取各种格式文件的方法
2018/06/22 Python
借助HTML5 Canvas来绘制三角形和矩形等多边形的方法
2016/03/14 HTML / CSS
思想品德课教学反思
2014/02/10 职场文书
供应链金融服务方案
2014/05/25 职场文书
物业管理委托协议(2篇)
2014/09/23 职场文书
2014年民政工作总结
2014/11/26 职场文书
听证通知书
2015/04/24 职场文书
Vue项目中如何封装axios(统一管理http请求)
2021/05/02 Vue.js
Mysql数据库中datetime、bigint、timestamp来表示时间选择,谁来存储时间效率最高
2021/08/23 MySQL