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 相关文章推荐
prototype 1.5 & scriptaculous 1.6.1 学习笔记
Sep 07 Javascript
kmock javascript 单元测试代码
Feb 06 Javascript
在页面加载完成后通过jquery给多个span赋值
May 21 Javascript
Jquery给基本控件的取值、赋值示例
May 23 Javascript
Jquery的基本对象转换和文档加载用法实例
Feb 25 Javascript
Underscore.js常用方法总结
Feb 28 Javascript
jQuery实现的表格展开伸缩效果实例
Sep 07 Javascript
微信运维交互机器人的示例代码
Nov 12 Javascript
微信小程序实现元素渐入渐出动画效果封装方法
May 18 Javascript
使用vue实现一个电子签名组件的示例代码
Jan 06 Javascript
vue实现登录拦截
Jun 29 Javascript
vue接通后端api以及部署到服务器操作
Aug 13 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
thinkphp模板赋值与替换实例简述
2014/11/24 PHP
php实现基于PDO的预处理示例
2017/03/28 PHP
php实现基于pdo的事务处理方法示例
2017/07/21 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
javascript 限制输入和粘贴(IE,firefox测试通过)
2008/11/14 Javascript
Javascript 中文字符串处理额外注意事项
2009/11/15 Javascript
用jquery实现自定义风格的滑动条实现代码
2011/04/26 Javascript
js之onload事件的一点使用心得
2013/08/14 Javascript
JS复制内容到剪切板的实例代码(兼容IE与火狐)
2013/11/19 Javascript
javascript页面上使用动态时间具体实现
2014/03/18 Javascript
Jquery响应回车键直接提交表单操作代码
2014/07/25 Javascript
Javascript中封装window.open解决不兼容问题
2014/09/28 Javascript
JavaScript使用DeviceOne开发实战(一) 配置和起步
2015/12/01 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
jQuery simpleModal插件的使用介绍
2016/08/30 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
2017/07/17 Javascript
js使用highlight.js高亮你的代码
2017/08/18 Javascript
详解Angular模板引用变量及其作用域
2018/11/23 Javascript
JavaScript实现无限级递归树的示例代码
2019/03/29 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue路由守卫+登录态管理实例分析
2019/05/21 Javascript
js实现简易点击切换显示或隐藏
2020/11/29 Javascript
在CMD命令行中运行python脚本的方法
2018/05/12 Python
python实现批量解析邮件并下载附件
2018/06/19 Python
关于django 1.10 CSRF验证失败的解决方法
2019/08/31 Python
Python爬虫实现的根据分类爬取豆瓣电影信息功能示例
2019/09/15 Python
Python SQLAlchemy入门教程(基本用法)
2019/11/11 Python
python读取多层嵌套文件夹中的文件实例
2020/02/27 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
金宝贝童装官网:Gymboree
2016/08/31 全球购物
俄罗斯最大的在线珠宝大卖场:Nebo
2019/12/08 全球购物
保险公司早会主持词
2014/03/22 职场文书
施工协议书范本
2014/04/22 职场文书
小学优秀教师事迹材料
2014/12/16 职场文书
SQL Server 忘记密码以及重新添加新账号
2022/04/26 SQL Server