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 相关文章推荐
jQuery 性能优化指南(2)
May 21 Javascript
jQuery 判断页面元素是否存在的代码
Aug 14 Javascript
jQuery为iframe的body添加click事件的实现代码
Apr 07 Javascript
Js 回车换行处理的办法及replace方法应用
Jan 24 Javascript
浅谈JavaScript Date日期和时间对象
Dec 29 Javascript
js验证真实姓名与身份证号是否匹配
Oct 13 Javascript
一次$.getJSON不执行的简单记录
Jul 19 Javascript
前端程序员必须知道的高性能Javascript知识
Aug 24 Javascript
jQuery中fadein与fadeout方法用法示例
Sep 16 Javascript
微信小程序  TLS 版本必须大于等于1.2问题解决
Feb 22 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
json 带斜杠时如何解析的实现
Aug 12 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/08/19 PHP
PHP实现函数内修改外部变量值的方法示例
2018/12/28 PHP
初试jQuery EasyUI 使用介绍
2010/04/01 Javascript
Javascript表格翻页效果的具体实现
2013/10/05 Javascript
浅谈js图片前端预览之filereader和window.URL.createObjectURL
2016/06/30 Javascript
js检测离开或刷新页面时表单数据是否更改的方法
2016/08/02 Javascript
node安装--linux下的快速安装教程
2017/03/21 Javascript
vue计算属性及使用详解
2018/04/02 Javascript
基于Bootstrap下拉框插件bootstrap-select使用方法详解
2018/08/07 Javascript
从0到1搭建Element的后台框架的方法步骤
2019/04/10 Javascript
Vue3 源码导读(推荐)
2019/10/14 Javascript
纯js+css实现仿移动端淘宝网站的弹出详情框功能
2019/12/29 Javascript
动态实现element ui的el-table某列数据不同样式的示例
2021/01/22 Javascript
JavaScript代码实现微博批量取消关注功能
2021/02/05 Javascript
[01:05:32]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第一局
2016/03/04 DOTA
Python字符串处理实现单词反转
2017/06/14 Python
使用Django和Python创建Json response的方法
2018/03/26 Python
Python3多进程 multiprocessing 模块实例详解
2018/06/11 Python
python 从csv读数据到mysql的实例
2018/06/21 Python
Python检查ping终端的方法
2019/01/26 Python
如何安装并使用conda指令管理python环境
2019/07/10 Python
深入了解Django中间件及其方法
2019/07/26 Python
Scrapy框架基本命令与settings.py设置
2020/02/06 Python
python中查看.db文件中表格的名字及表格中的字段操作
2020/07/07 Python
Python自动化操作实现图例绘制
2020/07/09 Python
HTML5移动端开发遇见的东西
2019/10/11 HTML / CSS
HTML5在IE10、火狐下中文乱码问题的解决方法
2013/11/18 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
HTML5实现视频弹幕功能
2019/08/09 HTML / CSS
法国太阳镜店:Sunglasses Shop
2016/08/27 全球购物
后备干部考察材料
2014/02/12 职场文书
售后求职信范文
2014/03/15 职场文书
家长会主持词开场白
2015/05/29 职场文书
《秋思》教学反思
2016/02/23 职场文书
python中的class_static的@classmethod的巧妙用法
2021/06/22 Python
解决Mysql多行子查询的使用及空值问题
2022/01/22 MySQL