jQuery中 $ 符号的冲突问题及解决方案


Posted in Javascript onNovember 04, 2016

在jQuery中,$是jQuery的别名,为了书写方便,我们更习惯用$('#id')这一类的方式来书写代码。当同一页面引用了jQuery多个版本或者jQuery与某些其他js库产生冲突,控制台就会报错。

同一个页面多个版本冲突解决办法

你可能会问,为什么在一个页面上会引用多个版本的jQuery,只引用一个不就好了吗?

答案是:不行。一般要用到两个(或以上)版本的jQuery库的原因是:现有的网站已经用了旧版本的jQuery以及相关插件,直接将jQuery升级到新版本会导致这些基于旧版本jQuery的插件不能工作,除非你能把这些插件全部升级,或者等各个插件的作者发布支持新版本jQuery的插件版本。

解决办法:使用jQuery.noConflict([extreme])方法。

比如我引用的是jquery-1.11.0.js和jquery-1.5.0.js。

<script src="jquery-1.5.0.js"></script>
<script src="jquery-1.11.0.js"></script>
<script>
console.log($.fn.jquery); //'1.11.0'
var $jq = jQuery.noConflict(true);
console.log($.fn.jquery); //'1.5.0'
</script>

可以看到jQuery.noConflict将变量 $ 的控制权让渡给了1.5.0版本的jQuery库。而要使用1.11.0的版本则要用 $jq() 代替。

但是引入了两个版本的jQuery后,代码很乱,导致别人难以理解甚至误删了一些重要代码怎么办?

改进的方法是:

先直接引用新版的jQuery库。

<script src="jquery-1.11.0.js"></script>
<script src="myJS.js"></script>

把我们写的脚本myJS.js中的主体内容写在立即调用函数里头,引用的是新的版本的jQuery。

//myJS.js
(function() {
//myJS.js的代码,引用的是v1.11.0
})();

再写一个立即调用函数,把旧版本的jQuery代码嵌进去(压缩代码只有几行)。然后在里面写代码,此时变量$所引用的前面嵌进去的jQuery

//myJS.js
(function () {
//...此处省略/jquery1.5.0
//jquery1.5.0的压缩代码
var $ = jQuery.noConflict(true);
//此处开始写的$()所引用的是jquery1.5.0
})();

Ps:需要检查jQuery的协议是否允许我们把jQuery源码直接嵌入我们自己的JavaScript代码

2. 同一页面jQuery和其他js库冲突解决方法

①依然可以使用jQuery.noConflict将变量$的控制权让渡给其他js库。

如果jQuery在其他js库前,不需要使用noConflict。 

<!-- 引入 jquery库 -->
<script src="jquery-1.11.0.js"></script>
<script type="text/javascript">
var $jq = $;
console.log($.fn.jquery); //'1.11.0'
</script>
<!-- 引入 其他库-->
<script type="text/javascript">
$ = {
fn:{
jquery:"otherJS"
}
};
</script>
<script type="text/javascript"> 
console.log($.fn.jquery); //otherJS
console.log($jq.fn.jquery); //'1.11.0'
</script>

如果在其他js库之后,用noConflict让渡。

<!-- 引入 其他库-->
<script type="text/javascript">
$ = {
fn:{
jquery:"otherJS"
}
};
</script>
<!-- 引入 jquery库 -->
<script src="jquery-1.11.0.js"></script>
<script type="text/javascript"> 
console.log($.fn.jquery); //'1.11.0'
var $180 = $.noConflict(); //解除冲突
console.log($.fn.jquery); //otherJS
console.log($jq.fn.jquery); //'1.11.0'
</script>

它的缺点是:在接下来的js代码中只要引用到jQuery就必须把$换成$jq。

②ready函数是jquery的入口函数

可以将

$(document).ready(function() {...})

替换成:

jQuery(document).ready(function($) {...})

它的缺点是:只对ready嵌套内的代码有效,如果ready函数外还有一些子函数,对嵌套外的代码是无效的。

③把$作为参数传进去

(function($) { 
//你的js代码 
})(jQuery);

或者

jQuery(function($){ 
//你的js代码
}

你的js代码可以包括上面说到的ready函数和子函数。在用jQuery写公共组件的时候,使用这种方式既能避免$冲突,又无需要求使用公共组件的人修改自己的代码。

以上所述是小编给大家介绍的jQuery中 $ 符号的冲突问题及解决方案,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js操作textarea方法集合封装(兼容IE,firefox)
Feb 22 Javascript
分享Javascript实用方法二
Dec 13 Javascript
几句话带你理解JS中的this、闭包、原型链
Sep 26 Javascript
Angular 中 select指令用法详解
Sep 29 Javascript
微信小程序 window_x64环境搭建
Sep 30 Javascript
JS短信验证码倒计时功能的实现(没有验证码,只有倒计时)
Oct 27 Javascript
Bootstrap风格的WPF样式
Dec 07 Javascript
JS日程管理插件FullCalendar简单实例
Feb 07 Javascript
vue父子组件的数据传递示例
Mar 07 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
jQuery实现表单动态加减、ajax表单提交功能
Jun 08 jQuery
js实现点击选项置顶动画效果
Aug 25 Javascript
JAVA Web实时消息后台服务器推送技术---GoEasy
Nov 04 #Javascript
详解js运算符单竖杠“|”与“||”的用法和作用介绍
Nov 04 #Javascript
使用Ajax与服务器(JSON)通信实例
Nov 04 #Javascript
AngularJS过滤器filter用法实例分析
Nov 04 #Javascript
URL的参数中有加号传值变为空格的问题(URL特殊字符)
Nov 04 #Javascript
Angular页面间切换及传值的4种方法
Nov 04 #Javascript
AngularJS实现根据变量改变动态加载模板的方法
Nov 04 #Javascript
You might like
php在线打包程序源码
2008/07/27 PHP
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
php去除头尾空格的2种方法
2015/03/16 PHP
详解PHP的Yii框架中自带的前端资源包的使用
2016/03/31 PHP
swoole_process实现进程池的方法示例
2018/10/29 PHP
HTML页面如何象ASP一样接受参数
2007/02/07 Javascript
javascript获取下拉列表框当中的文本值示例代码
2013/07/31 Javascript
jquery选择器大全 全面详解jquery选择器
2014/03/06 Javascript
jquery如何把数组变为字符串传到服务端并处理
2014/04/30 Javascript
javascript实现禁止右键和F12查看源代码
2014/12/26 Javascript
JS实现自动固定顶部的悬浮菜单栏效果
2015/09/16 Javascript
JS事件添加和移出的兼容写法示例
2016/06/20 Javascript
AngularJS 所有版本下载地址
2016/09/14 Javascript
JS实现类似51job上的地区选择效果示例
2016/11/17 Javascript
实现隔行换色效果的两种方式【实用】
2016/11/27 Javascript
JavaScript中Hoisting详解 (变量提升与函数声明提升)
2017/08/18 Javascript
vue单页面在微信下只能分享落地页的解决方案
2019/04/15 Javascript
小程序如何写动态标签的实现方法
2020/02/05 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
JavaScript实现网页计算器功能
2020/10/29 Javascript
微信小程序视频弹幕发送功能的实现
2020/12/28 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
python利用拉链法实现字典方法示例
2017/03/25 Python
[原创]使用豆瓣提供的国内pypi源
2017/07/02 Python
python系统指定文件的查找只输出目录下所有文件及文件夹
2020/01/19 Python
pyecharts绘制中国2020肺炎疫情地图的实例代码
2020/02/12 Python
keras分类模型中的输入数据与标签的维度实例
2020/07/03 Python
Oracle快照(snapshot)
2015/03/13 面试题
怎样自定义一个异常类
2016/09/27 面试题
外贸主管求职简历的自我评价
2013/10/23 职场文书
应届本科生推荐信范文
2013/12/25 职场文书
母亲80寿诞答谢词
2014/01/16 职场文书
普通大学毕业生自荐信范文
2014/02/23 职场文书
财务管理专业求职信
2014/06/11 职场文书
暂住证明怎么写
2015/06/19 职场文书
Python基础之数据结构详解
2021/04/28 Python