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 29 Javascript
JS从数组中随机取出几个数组元素的方法
Aug 02 Javascript
JavaScript字符串对象(string)基本用法示例
Jan 18 Javascript
vue-cli 引入、配置axios的方法
May 08 Javascript
详解React native fetch遇到的坑
Aug 30 Javascript
Vue项目数据动态过滤实践及实现思路
Sep 11 Javascript
微信小程序实现简单跑马灯效果
May 26 Javascript
jQuery实现经典的网页3D轮播图封装功能【附源码下载】
Feb 15 jQuery
vue实现文字横向无缝走马灯组件效果的实例代码
Apr 09 Javascript
详解vue.js移动端配置flexible.js及注意事项
Apr 10 Javascript
JavaScript实现秒杀时钟倒计时
Sep 29 Javascript
微信小程序实用代码段(收藏版)
Dec 17 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开发负载均衡指南
2010/07/17 PHP
PHP学习笔记之二
2011/01/17 PHP
php中根据某年第几天计算出日期年月日的代码
2011/02/24 PHP
php实现的替换敏感字符串类实例
2014/09/22 PHP
php 解决扫描二维码下载跳转问题
2017/01/13 PHP
关于php几种字符串连接的效率比较(详解)
2017/02/22 PHP
javascript Object与Function使用
2010/01/11 Javascript
基于Jquery 解决Ajax请求的页面 浏览器后退前进功能,页面刷新功能实效问题
2010/12/11 Javascript
Eclipse下jQuery文件报错出现错误提示红叉
2014/01/13 Javascript
jquery选择器之基本过滤选择器详解
2014/01/27 Javascript
用js通过url传参把数据从一个页面传到另一个页面
2014/09/01 Javascript
浅谈JavaScript 框架分类
2014/11/10 Javascript
JS实现把鼠标放到链接上出现滚动文字的方法
2016/04/06 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
js自调用匿名函数的三种写法(推荐)
2016/08/19 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
2016/10/30 Javascript
Vue实例简单方法介绍
2017/01/20 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
详解Vue路由钩子及应用场景(小结)
2017/11/07 Javascript
微信小程序 swiper 组件遇到的问题及解决方法
2019/05/26 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
2020/03/26 Javascript
python切换hosts文件代码示例
2013/12/31 Python
Python用Bottle轻量级框架进行Web开发
2016/06/08 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
2017/06/02 Python
Python自动化运维之IP地址处理模块详解
2017/12/10 Python
对python多线程中Lock()与RLock()锁详解
2019/01/11 Python
python树莓派红外反射传感器
2019/01/21 Python
基于Python的PIL库学习详解
2019/05/10 Python
给排水工程师岗位职责
2013/11/21 职场文书
数控技术应用个人求职信范文
2014/02/03 职场文书
广告传媒专业应届生求职信
2014/03/01 职场文书
学雷锋演讲稿
2014/03/04 职场文书
营销计划书范文
2015/01/17 职场文书
学雷锋团日活动总结
2015/05/06 职场文书
行政上诉状范文
2015/05/23 职场文书
新员工实习期个人工作总结
2015/10/15 职场文书