如何解决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.form.js异步提交表单详解
Apr 25 jQuery
jQuery回调方法使用示例
Jun 26 jQuery
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 jQuery
解决html-jquery/js引用外部图片时遇到看不了或出现403的问题
Sep 22 jQuery
jQuery判断网页是否已经滚动到浏览器底部的实现方法
Oct 27 jQuery
Vue中正确使用jQuery的方法
Oct 30 jQuery
jquery 获取索引值在一定范围的列表方法
Jan 25 jQuery
jQuery实现点击旋转,再点击恢复初始状态动画效果示例
Dec 11 jQuery
jQuery+css实现的点击图片放大缩小预览功能示例【图片预览 查看大图】
May 29 jQuery
jQuery实现鼠标拖拽登录框移动效果
Sep 13 jQuery
jQuery实现简单轮播图效果
Dec 27 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
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
PHP解决URL中文GBK乱码问题的两种方法
2014/06/03 PHP
关于php中的json_encode()和json_decode()函数的一些说明
2016/11/20 PHP
PHP实现大数(浮点数)取余的方法
2017/02/18 PHP
javascript实现上传图片前的预览(TX的面试题)
2007/08/20 Javascript
jquery阻止冒泡事件使用模拟事件
2013/09/06 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
浅析Node.js实现HTTP文件下载
2016/08/05 Javascript
Knockout结合Bootstrap创建动态UI实现产品列表管理
2016/09/14 Javascript
jQuery检查元素存在性(推荐)
2016/09/17 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
基于Vue.js实现简单搜索框
2020/03/26 Javascript
Bootstrap php制作动态分页标签
2016/12/23 Javascript
详解vue-validator(vue验证器)
2017/01/16 Javascript
axios学习教程全攻略
2017/03/26 Javascript
详解50行代码,Node爬虫练手项目
2019/04/22 Javascript
webpack的tree shaking的实现方法
2019/09/18 Javascript
详解JS函数防抖
2020/06/05 Javascript
微信小程序报错: thirdScriptError的错误问题
2020/06/19 Javascript
[00:43]FTP典藏礼包 DOTA2三大英雄霸气新套装
2014/03/21 DOTA
浅析Python中的多进程与多线程的使用
2015/04/07 Python
Python中对象迭代与反迭代的技巧总结
2016/09/17 Python
Django如何实现网站注册用户邮箱验证功能
2019/08/14 Python
keras 特征图可视化实例(中间层)
2020/01/24 Python
Pytorch自定义Dataset和DataLoader去除不存在和空数据的操作
2021/03/03 Python
卡塔尔航空官方网站:Qatar Airways
2017/02/08 全球购物
英国在线玫瑰专家:InterRose
2019/12/01 全球购物
致垒球运动员加油稿
2014/02/16 职场文书
仓管员岗位责任制
2014/02/19 职场文书
保安公司服务承诺书
2014/05/28 职场文书
禁止高声喧哗的标语
2014/06/11 职场文书
同意迁入证明模板
2014/10/26 职场文书
护士长2014年终工作总结
2014/11/11 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
初中同学会致辞
2015/08/01 职场文书
Python数据类型最全知识总结
2021/05/31 Python