如何解决jQuery 和其他JS库的冲突


Posted in jQuery onJune 22, 2020

在 jQuery 库中,几乎所有的插件都被限制在它的命名空间里。通常,全局对象都被很好地存储在 jQuery 命名空间里,因此当把 jQuery 和其他 JavaScript 库(例如 Prototype、MooTools 或 YUI)一起使用时,不会引起冲突。

注意:默认情况下,jQuery 用 $ 作为自身的快捷方式。

1.jQuery库在其他库之后导入

在其他库和 jQuery 库都被加载完毕后,可以在任何时候调用 jQuery.noConflict() 函数来将变量 $ 的控制权移交给其他 JavaScript 库。示例如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>冲突解决1</title>
<!-- 引入 prototype -->
<script src="lib/prototype.js" type="text/javascript"></script>
<!-- 引入 jQuery -->
<script src="../../scripts/jquery.js" type="text/javascript"></script>
</head>
<body>
<p id="pp">Test-prototype(将被隐藏)</p>
<p >Test-jQuery(将被绑定单击事件)</p>
<script type="text/javascript">
jQuery.noConflict();     //将变量$的控制权让渡给prototype.js
jQuery(function(){     //使用jQuery
 jQuery("p").click(function(){
  alert( jQuery(this).text() );
 });
});

$("pp").style.display = 'none';  //使用prototype.js隐藏元素
</script>

</body>
</html>

然后,就可以在程序里将 jQuery() 函数作为 jQuery 对象的制造工厂。

此外,还有另一种选择。如果想确保 jQuery 不会与其他库冲突,但又想自定义一个快捷方式,可以进行如下操作:

<script type="text/javascript">
var $j = jQuery.noConflict();   //自定义一个比较短快捷方式
$j(function(){      //使用jQuery
 $j("p").click(function(){
  alert( $j(this).text() );
 });
});

$("pp").style.display = 'none';  //使用prototype.js隐藏元素
</script>

可以自定义备用名称,例如 jq、$J、awesomequery 等。

如果不想给 jQuery 自定义这些备用名称,还想使用 $ 而不管其他库的 $() 方法,同时又不想与其他库相冲突,那么可以使用以下两种解决方法。

其一:

<script type="text/javascript">
jQuery.noConflict();    //将变量$的控制权让渡给prototype.js
jQuery(function($){     //使用jQuery
 $("p").click(function(){  //继续使用 $ 方法
  alert( $(this).text() );
 });
});

$("pp").style.display = 'none';  //使用prototype
</script>

其二:

<script type="text/javascript">
jQuery.noConflict();     //将变量$的控制权让渡给prototype.js
(function($){      //定义匿名函数并设置形参为$
 $(function(){     //匿名函数内部的$均为jQuery
  $("p").click(function(){  //继续使用 $ 方法
   alert($(this).text());
  });
 });
})(jQuery);       //执行匿名函数且传递实参jQuery

$("pp").style.display = 'none';  //使用prototype
</script>

这应该是最理想的方式,因为可以通过改变最少的代码来实现全面的兼容性。

2.jQuery库在其他库之前导入

如果 jQuery 库在其他库之前就导入了,那么可以直接使用"jQuery”来做一些jQuery的工作。同时,可以使用 $() 方法作为其他库的快捷方式。这里无需调用 jQuery.noconflict() 函数。示例如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>冲突解决5</title>
<!-- 引入 jQuery -->
<script src="../../scripts/jquery.js" type="text/javascript"></script>
<!-- 引入 prototype -->
<script src="lib/prototype.js" type="text/javascript"></script>
</head>
<body>
<p id="pp">Test-prototype(将被隐藏)</p>
<p >Test-jQuery(将被绑定单击事件)</p>

<script type="text/javascript">
jQuery(function(){ //直接使用 jQuery ,没有必要调用"jQuery.noConflict()"函数。
 jQuery("p").click(function(){  
  alert( jQuery(this).text() );
 });
});

$("pp").style.display = 'none'; //使用prototype
</script>
</body>
</html>

有了这些方法来解决冲突,就可以在项目中放心地引用 jQuery 了。

以上就是如何解决jQuery 和其他JS库的冲突的详细内容,更多关于解决jQuery JS库冲突的资料请关注三水点靠木其它相关文章!

jQuery 相关文章推荐
jQuery插件FusionCharts绘制的2D帕累托图效果示例【附demo源码】
Mar 28 jQuery
jQuery EasyUI tree增加搜索功能的实现方法
Apr 27 jQuery
简述jQuery Easyui一些用法
Aug 01 jQuery
使用jQuery实现鼠标点击左右按钮滑动切换
Aug 04 jQuery
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
JQuery 获取多个select标签option的text内容(实例)
Sep 07 jQuery
jQuery实现左右滑动的toggle方法
Mar 03 jQuery
JQuery选中select组件被选中的值方法
Mar 08 jQuery
[原创]jQuery实现合并/追加数组并去除重复项的方法
Apr 11 jQuery
JQuery模拟实现网页中自定义鼠标右键菜单功能
Nov 14 jQuery
jquery树形插件zTree高级使用详解
Aug 16 jQuery
JS JQuery获取data-*属性值方法解析
Sep 01 jQuery
jQuery 移除事件的方法
Jun 20 #jQuery
Jquery ajax书写方法代码实例解析
Jun 12 #jQuery
基于ajax及jQuery实现局部刷新过程解析
Sep 12 #jQuery
jquery.validate自定义验证用法实例分析【成功提示与择要提示】
Jun 06 #jQuery
Jquery滑动门/tab切换实现方法完整示例
Jun 05 #jQuery
JQuery实现折叠式菜单的详细代码
Jun 03 #jQuery
深入分析jQuery.one() 函数
Jun 03 #jQuery
You might like
PHP加密解密字符串汇总
2015/04/26 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
php精度计算的问题解析
2019/06/21 PHP
Laravel统一错误处理为JSON的方法介绍
2020/10/18 PHP
对 lightbox JS 图片控件进行了一下改造, 使其他支持复杂的图片说明
2010/03/20 Javascript
JS二维数组的定义说明
2014/03/03 Javascript
javascript中expression的用法整理
2014/05/13 Javascript
jQuery及JS实现循环中暂停的方法
2015/02/02 Javascript
JavaScript实现Java中StringBuffer的方法
2015/02/09 Javascript
浅析JavaScript作用域链、执行上下文与闭包
2016/02/01 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
jQuery弹出层插件popShow(改进版)用法示例
2017/01/23 Javascript
Angular.js组件之input mask对input输入进行格式化详解
2017/07/10 Javascript
详解利用 Vue.js 实现前后端分离的RBAC角色权限管理
2017/09/15 Javascript
vue实现商城购物车功能
2017/11/27 Javascript
Node.js使用Angular简单示例
2018/05/11 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[01:53]DOTA2超级联赛专访Zhou 五年职业青春成长
2013/05/29 DOTA
Python列表推导式的使用方法
2013/11/21 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python实现简单加密解密机制
2019/03/19 Python
python中使用ctypes调用so传参设置遇到的问题及解决方法
2019/06/19 Python
Python+OpenCV图像处理——图像二值化的实现
2020/10/24 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
基于HTML5 Canvas:字符串,路径,背景,图片的详解
2013/05/09 HTML / CSS
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
三下乡活动方案
2014/01/31 职场文书
园艺师求职信
2014/03/10 职场文书
查摆问题对照检查材料
2014/08/28 职场文书
2014年人事部工作总结
2014/12/03 职场文书
小学优秀教师材料
2014/12/15 职场文书
2015年小学辅导员工作总结
2015/05/27 职场文书
入党后的感想
2015/08/10 职场文书
小学三年级作文之写景
2019/11/05 职场文书
MySQL之PXC集群搭建的方法步骤
2021/05/25 MySQL
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS