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 相关文章推荐
javascript全局变量封装模块实现代码
Nov 28 Javascript
jQuery javaScript捕获回车事件(示例代码)
Nov 07 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
Apr 20 Javascript
在JavaScript中用getMinutes()方法返回指定的分时刻
Jun 10 Javascript
javascript实现显示和隐藏div方法汇总
Aug 14 Javascript
jQuery表格插件datatables用法详解
Nov 23 Javascript
基于javascript实现简单的抽奖系统
Apr 15 Javascript
前端开发之CSS原理详解
Mar 11 Javascript
Javascript中 toFixed四舍六入方法
Aug 21 Javascript
[js高手之路]原型式继承与寄生式继承详解
Aug 28 Javascript
vue.js动画中的js钩子函数的实现
Jul 06 Javascript
详解微信小程序支付流程与梳理
Jul 16 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获取MSN好友列表类的实现代码
2013/06/23 PHP
PHP+redis实现添加处理投票的方法
2015/11/14 PHP
Laravel框架文件上传功能实现方法示例
2019/04/16 PHP
Laravel6.18.19如何优雅的切换发件账户
2020/06/14 PHP
11款新鲜的jQuery插件[附所有demo下载]
2011/01/24 Javascript
Javascript中定义方法的另类写法(批量定义js对象的方法)
2011/02/25 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
javascript中apply和call方法的作用及区别说明
2014/02/14 Javascript
Jquery动态替换div内容及动态展示的方法
2015/01/23 Javascript
jQuery对象与DOM对象之间的相互转换
2015/03/03 Javascript
让图片跳跃起来  javascript图片轮播特效
2016/02/16 Javascript
JQuery的Pager分页器实现代码
2016/05/03 Javascript
jquery判断checkbox是否选中及改变checkbox状态的实现方法
2016/05/26 Javascript
基于JS实现回到页面顶部的五种写法(从实现到增强)
2016/09/03 Javascript
微信小程序 下拉菜单简单实例
2017/04/13 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
vue左右侧联动滚动的实现代码
2018/06/06 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
2019/04/15 Javascript
vue递归组件实战之简单树形控件实例代码
2019/08/27 Javascript
[50:44]DOTA2-DPC中国联赛 正赛 SAG vs Dragon BO3 第二场 2月22日
2021/03/11 DOTA
Python操作MongoDB数据库PyMongo库使用方法
2015/04/27 Python
python实现支付宝当面付(扫码支付)功能
2018/05/30 Python
Python爬虫之网页图片抓取的方法
2018/07/16 Python
Python pygorithm模块用法示例【常见算法测试】
2018/08/16 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
Python实现列表索引批量删除的5种方法
2020/11/16 Python
用canvas画心电图的示例代码
2018/09/10 HTML / CSS
精灵市场:Pixie Market
2019/06/18 全球购物
软件工程师岗位职责
2013/11/16 职场文书
学生抄作业检讨书(2篇)
2014/10/17 职场文书
2014年测量员工作总结
2014/12/12 职场文书
走近毛泽东观后感
2015/06/04 职场文书
医德医风学习心得体会
2016/01/25 职场文书
《七月的天山》教学反思
2016/02/19 职场文书
浅谈python数据类型及其操作
2021/05/25 Python