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 load Page,load css,load js实现代码
Mar 31 Javascript
Prototype源码浅析 Enumerable部分(二)
Jan 18 Javascript
javascript如何判断输入的url是否正确
Apr 11 Javascript
jquery常用特效方法使用示例
Apr 25 Javascript
Vue.js实现一个漂亮、灵活、可复用的提示组件示例
Mar 17 Javascript
node安装--linux下的快速安装教程
Mar 21 Javascript
第一个Vue插件从封装到发布
Nov 22 Javascript
javascript中的隐式调用
Feb 10 Javascript
jQuery动态移除与增加onclick属性的方法详解
Jun 07 jQuery
小程序实现多选框功能
Oct 30 Javascript
JavaScript位置参数实现原理及过程解析
Sep 14 Javascript
jQuery zTree如何改变指定节点文本样式
Oct 16 jQuery
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
使用Discuz关键词服务器实现PHP中文分词
2014/03/11 PHP
CentOS 6.3下安装PHP xcache扩展模块笔记
2014/09/10 PHP
PHP错误Warning: Cannot modify header information - headers already sent by解决方法
2014/09/27 PHP
PHP中实现接收多个name相同但Value不相同表单数据实例
2015/02/03 PHP
php eval函数一句话木马代码
2015/05/21 PHP
PHP基于反射机制实现插件的可插拔设计详解
2016/11/10 PHP
JavaScript 对象模型 执行模型
2010/10/15 Javascript
JavaScript中的style.display属性操作
2013/03/27 Javascript
JavaScript中使用arguments获得函数传参个数实例
2014/08/27 Javascript
解决JS请求服务器gbk文件乱码的问题
2015/10/16 Javascript
《JavaScript高级编程》学习笔记之object和array引用类型
2015/11/01 Javascript
修改jquery中dialog的title属性方法(推荐)
2016/08/26 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
Element Table的row-class-name无效与动态高亮显示选中行背景色
2018/11/30 Javascript
利用原生JavaScript实现造日历轮子实例代码
2019/05/08 Javascript
python 字典(dict)遍历的四种方法性能测试报告
2014/06/25 Python
python简单实现计算过期时间的方法
2015/06/09 Python
尝试使用Python多线程抓取代理服务器IP地址的示例
2015/11/09 Python
python中实现延时回调普通函数示例代码
2017/09/08 Python
python列表的增删改查实例代码
2018/01/30 Python
django-rest-framework解析请求参数过程详解
2019/07/18 Python
Python计算两个矩形重合面积代码实例
2019/09/16 Python
PyCharm使用Docker镜像搭建Python开发环境
2019/12/26 Python
Python warning警告出现的原因及忽略方法
2020/01/31 Python
美国零售商店:Blue&Cream
2017/04/07 全球购物
美国班级戒指、帽子和礼服、毕业产品、年鉴:Balfour
2018/11/01 全球购物
构造方法和其他方法的区别
2016/04/26 面试题
药店主任岗位责任制
2014/02/10 职场文书
企业宣传方案
2014/03/04 职场文书
高三家长寄语
2014/04/03 职场文书
说明书格式及范文
2014/05/07 职场文书
2014年安全工作总结范文
2014/11/13 职场文书
辞职信怎么写
2015/02/27 职场文书
成绩单家长意见
2015/06/03 职场文书
适合后台管理系统开发的12个前端框架(小结)
2021/06/29 Javascript
CentOS7设置ssh服务以及端口修改方式
2022/12/24 Servers