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 相关文章推荐
关于恒等于(===)和非恒等于(!==)
Aug 20 Javascript
解析javascript 实用函数的使用详解
May 10 Javascript
javascript实现了照片拖拽点击置顶的照片墙代码
Apr 03 Javascript
jQuery动态背景图片效果实现方法
Jul 03 Javascript
javascript与Python快速排序实例对比
Aug 10 Javascript
js创建对象几种方式的优缺点对比
Sep 28 Javascript
基于Vue实现tab栏切换内容不断实时刷新数据功能
Apr 13 Javascript
解决JS内存泄露之js对象和dom对象互相引用问题
Jun 25 Javascript
Vue中父组件向子组件通信的方法
Jul 11 Javascript
基于JavaScript实现无缝滚动效果
Jul 21 Javascript
Vue.js更改调试地址端口号的实例
Sep 19 Javascript
angular4笔记系列之内置指令小结
Nov 09 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 str_pad 函数使用详解
2009/01/13 PHP
用PHP将网址字符串转换成超链接(网址或email)
2010/05/25 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
Laravel框架学习笔记(二)项目实战之模型(Models)
2014/10/15 PHP
PHP变量的作用范围实例讲解
2020/12/22 PHP
用js判断浏览器是否是IE的比较好的办法
2007/05/08 Javascript
js调用浏览器打印模块实现点击按钮触发自定义函数
2014/03/21 Javascript
jquery xMarquee实现文字水平无缝滚动效果
2014/04/29 Javascript
js实现特定位取反原理及示例
2014/06/30 Javascript
JavaScript表单验证的两种实现方法
2017/02/11 Javascript
layui导航栏实现代码
2017/05/19 Javascript
webpack打包非模块化js的方法
2018/10/24 Javascript
如何在JavaScript中谨慎使用代码注释
2019/06/21 Javascript
layui下拉列表select实现可输入查找的方法
2019/09/28 Javascript
在vue中获取wangeditor的html和text的操作
2020/10/23 Javascript
用Python编写一个简单的Lisp解释器的教程
2015/04/03 Python
Python字符串处理函数简明总结
2015/04/13 Python
Python的Django框架中消息通知的计数器实现教程
2016/06/13 Python
flask中的wtforms使用方法
2018/07/21 Python
详解Python字典的操作
2019/03/04 Python
python实现图片中文字分割效果
2019/07/22 Python
django将网络中的图片,保存成model中的ImageField的实例
2019/08/07 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
MxNet预训练模型到Pytorch模型的转换方式
2020/05/25 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
python爬虫今日热榜数据到txt文件的源码
2021/02/23 Python
纯HTML5+CSS3制作图片旋转
2016/01/12 HTML / CSS
关于canvas绘制模糊问题的解决方法
2019/09/24 HTML / CSS
搞笑获奖感言
2014/01/30 职场文书
企业优秀团员事迹材料
2014/08/20 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
党的群众路线教育实践活动整改落实情况自查报告
2014/10/28 职场文书
2014年保险业务员工作总结
2014/12/23 职场文书
公司副总经理岗位职责
2015/04/08 职场文书
销售内勤岗位职责范本
2015/04/13 职场文书
2016七夕情人节广告语
2016/01/28 职场文书