如何解决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 禁止鼠标右键并监听右键事件
Apr 27 jQuery
jquery dataTable 获取某行数据
May 05 jQuery
jquery中each循环的简单回滚操作
May 05 jQuery
基于jQuery封装的分页组件
Jun 26 jQuery
jQuery第一次运行页面默认触发点击事件的实例
Jan 10 jQuery
jquery 动态遍历select 赋值的实例
Sep 12 jQuery
jQuery子选择器与可见性选择器实例分析
Jun 28 jQuery
jquery实现垂直无限轮播的方法分析
Jul 16 jQuery
jQuery zTree插件使用简单教程
Aug 16 jQuery
jQuery+PHP+Ajax实现动态数字统计展示功能
Dec 25 jQuery
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
jQuery实现简单QQ聊天框
Aug 27 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 编写大型网站问题集
2010/05/07 PHP
PHP开发需要注意的安全问题
2010/09/01 PHP
PHP 8新特性简介
2020/08/18 PHP
深入理解JavaScript中的传值与传引用
2013/12/09 Javascript
用js将内容复制到剪贴板兼容浏览器
2014/03/18 Javascript
Javascript字符串浏览器兼容问题分析
2014/12/01 Javascript
javascript元素动态创建实现方法
2015/05/13 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
简单实现js倒计时功能
2017/02/13 Javascript
浅谈JavaScript中的apply/call/bind和this的使用
2017/02/26 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
详解JavaScript的BUG和错误
2018/05/07 Javascript
vue+canvas实现炫酷时钟效果的倒计时插件(已发布到npm的vue2插件,开箱即用)
2018/11/05 Javascript
[01:30:55]VG vs Mineski Supermajor 败者组 BO3 第三场 6.6
2018/06/07 DOTA
python设置windows桌面壁纸的实现代码
2013/01/28 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python爬虫之urllib3的使用示例
2018/07/09 Python
python将pandas datarame保存为txt文件的实例
2019/02/12 Python
Python自动化之数据驱动让你的脚本简洁10倍【推荐】
2019/06/04 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
Python中变量的输入输出实例代码详解
2019/07/28 Python
使用apiDoc实现python接口文档编写
2019/11/19 Python
python代码实现将列表中重复元素之间的内容全部滤除
2020/05/22 Python
AmazeUI 列表的实现示例
2020/08/17 HTML / CSS
英国家喻户晓的折扣商场:TK Maxx
2017/05/26 全球购物
留学自荐信的技巧
2013/10/17 职场文书
英语系本科生求职信范文
2013/12/18 职场文书
校运会入场式解说词
2014/02/10 职场文书
《十六年前的回忆》教学反思
2014/02/14 职场文书
化学教学随笔感言
2014/02/19 职场文书
《桃林那间小木屋》教学反思
2014/05/01 职场文书
仓库管理计划书
2014/05/04 职场文书
企业承诺书怎么写
2014/05/24 职场文书
医院中层管理人员培训心得体会
2016/01/11 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
JavaScript实现简单的音乐播放器
2022/08/14 Javascript