如何解决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 dataTable 后台加载数据并分页实例代码
Jun 07 jQuery
基于jquery日历价格、库存等设置插件
Jul 05 jQuery
jQuery实现拼图小游戏(实例讲解)
Jul 24 jQuery
jQuery DOM节点的遍历方法小结
Aug 15 jQuery
jQuery+ajax实现动态添加表格tr td功能示例
Apr 23 jQuery
jquery实现下载图片功能
Jul 18 jQuery
jQuery中DOM操作原则实例分析
Aug 01 jQuery
jQuery pager.js 插件动态分页功能实例分析
Aug 02 jQuery
jQuery实现倒计时功能完整示例
Jun 01 jQuery
jQuery 动态粒子效果示例代码
Jul 07 jQuery
jQuery实现滑动开关效果
Aug 02 jQuery
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 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 文件上传源码分析(RFC1867)
2009/10/30 PHP
php线性表顺序存储实现代码(增删查改)
2012/02/16 PHP
PHP 图片水印类代码
2012/08/27 PHP
PHP计数器的实现代码
2013/06/08 PHP
[原创]PHP简单开启curl的方法(测试可行)
2016/01/11 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
动态加载iframe
2006/06/16 Javascript
一页面多XMLHttpRequest对象
2007/01/22 Javascript
Iframe thickbox2.0使用的方法
2009/03/05 Javascript
js select常用操作控制代码
2010/03/16 Javascript
js取滚动条的尺寸的函数代码
2011/11/30 Javascript
Javascript Request获取请求参数如何实现
2012/11/28 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
javascript计时器事件使用详解
2014/01/07 Javascript
nodejs开发环境配置与使用
2014/11/17 NodeJs
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
JavaScript数据类型判定的总结笔记
2015/07/31 Javascript
js实现图片无缝滚动特效
2020/03/19 Javascript
JS中的BOM应用
2018/02/02 Javascript
vue中使用cropperjs的方法
2018/03/01 Javascript
vue-cli 3.x 修改dist路径的方法
2018/09/19 Javascript
vuex实现的简单购物车功能示例
2019/02/13 Javascript
微信小程序中转义字符的处理方法
2019/03/28 Javascript
使用vue打包进行云服务器上传的问题
2020/03/02 Javascript
[12:51]71泪洒现场!是DOTA2让经典重现
2014/03/24 DOTA
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
python模拟新浪微博登陆功能(新浪微博爬虫)
2013/12/24 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
python在新的图片窗口显示图片(图像)的方法
2019/07/11 Python
在Python3 numpy中mean和average的区别详解
2019/08/24 Python
python实现简单井字棋游戏
2020/03/04 Python
python中有帮助函数吗
2020/06/19 Python
Python爬虫与反爬虫大战
2020/07/30 Python
死亡证明书样本说明
2014/10/18 职场文书
2016年“节能宣传周”活动总结
2016/04/05 职场文书
golang 实现并发求和
2021/05/08 Golang