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获取scrollHeight问题想到的标准问题
May 27 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
详解JavaScript函数绑定
Aug 18 Javascript
浅谈js中变量初始化
Feb 03 Javascript
JS实现带缓冲效果打开、关闭、移动一个层的方法
May 09 Javascript
JQuery ztree带筛选、异步加载实例讲解
Feb 25 Javascript
jQuery基于json与cookie实现购物车的方法
Apr 15 Javascript
基于jQuery实现点击列表加载更多效果
May 31 Javascript
bootstrap switch开关组件使用方法详解
Aug 22 Javascript
js运算符的一些特殊用法
Jul 29 Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 Javascript
小程序实现图片移动缩放效果
May 26 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
新闻分类录入、显示系统
2006/10/09 PHP
深入php 正则表达式的学习探讨
2013/06/06 PHP
多个PHP中文字符串截取函数
2013/11/12 PHP
php中session与cookie的比较
2015/01/27 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
深入理解PHP中的Streams工具
2015/07/03 PHP
php微信高级接口群发 多客服
2016/06/23 PHP
Flash对联广告的关闭按钮讨论
2007/01/30 Javascript
Javascript让DEDECMS告别手写Tag
2014/09/01 Javascript
JS给超链接加确认对话框的方法
2015/02/24 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
浅谈JavaScript的全局变量与局部变量
2016/06/10 Javascript
jquery对所有input type=text的控件赋值实现方法
2016/12/02 Javascript
深入理解Node.js中的进程管理
2017/03/13 Javascript
Vue分页组件实例代码
2017/04/17 Javascript
Ionic2调用本地SQlite实例
2017/04/22 Javascript
封装运动框架实战左右与上下滑动的焦点轮播图(实例)
2017/10/17 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
js计算两个时间差 天 时 分 秒 毫秒的代码
2019/05/21 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Python入门篇之正则表达式
2014/10/20 Python
python基础入门学习笔记(Python环境搭建)
2016/01/13 Python
python测试mysql写入性能完整实例
2018/01/18 Python
python3第三方爬虫库BeautifulSoup4安装教程
2018/06/19 Python
pytorch sampler对数据进行采样的实现
2019/12/31 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
python 实现图片修复(可用于去水印)
2020/11/19 Python
HTML5 Canvas绘制五星红旗
2016/05/04 HTML / CSS
计算机应用专业推荐信
2013/11/13 职场文书
保护母亲河倡议书
2014/04/14 职场文书
献爱心倡议书
2014/04/14 职场文书
放假通知
2015/04/14 职场文书
2015年文明创建工作总结
2015/04/30 职场文书
物业公司管理制度
2015/08/05 职场文书
2019财务毕业实习报告
2019/06/27 职场文书
MySQL 数据库范式化设计理论
2022/04/22 MySQL