如何解决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 ajax动态新增节点无法触发点击事件的问题
May 24 jQuery
jQuery实现的文字逐行向上间歇滚动效果示例
Sep 06 jQuery
jQuery选择器之属性筛选选择器用法详解
Sep 19 jQuery
jquery 一键复制到剪切板的实例
Sep 20 jQuery
jQuery实现的页面遮罩层功能示例【测试可用】
Oct 14 jQuery
jquery在启动页面时,自动加载数据的实例
Jan 22 jQuery
Vue.js 通过jQuery ajax获取数据实现更新后重新渲染页面的方法
Aug 09 jQuery
jQuery ajax仿Google自动提示SearchSuggess功能示例
Mar 28 jQuery
如何用webpack4.0撸单页/多页脚手架 (jquery, react, vue, typescript)
Jun 18 jQuery
js判断复选框是否选中的方法示例【基于jQuery】
Oct 10 jQuery
jQuery 选择方法及$(this)用法实例分析
May 19 jQuery
jquery轮播图插件使用方法详解
Jul 31 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生成静态HTML速度快类库
2007/03/18 PHP
php中iconv函数使用方法
2008/05/24 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
2015/04/22 PHP
php实现有趣的人品测试程序实例
2015/06/08 PHP
php自动加载方式集合
2016/04/04 PHP
laravel 时间格式转时间戳的例子
2019/10/11 PHP
HTML中事件触发列表与解说
2007/07/09 Javascript
jQuery使用数组编写图片无缝向左滚动
2012/12/11 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
2014/10/16 Javascript
js实现百度地图定位于地址逆解析,显示自己当前的地理位置
2016/12/08 Javascript
web.js.字符串与正则表达式操作
2017/05/13 Javascript
angularjs实现猜数字大小功能
2020/05/20 Javascript
解决vue页面DOM操作不生效的问题
2018/03/17 Javascript
JS实现json对象数组按对象属性排序操作示例
2018/05/18 Javascript
如何使用jQuery操作Cookies方法解析
2020/09/08 jQuery
[44:40]KG vs LGD 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/16 DOTA
在Django的模板中使用认证数据的方法
2015/07/23 Python
Python微信企业号开发之回调模式接收微信端客户端发送消息及被动返回消息示例
2017/08/21 Python
Python实现快速计算词频功能示例
2018/06/25 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python实现多属性排序的方法
2018/12/05 Python
python2和python3在处理字符串上的区别详解
2019/05/29 Python
python读文件的步骤
2019/10/08 Python
python 实现矩阵填充0的例子
2019/11/29 Python
在线实验室测试:HealthLabs.com
2020/05/03 全球购物
.NET初级开发工程师面试题
2014/04/18 面试题
JAVA高级程序员面试题
2013/09/06 面试题
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
《问银河》教学反思
2014/02/19 职场文书
司机岗位职责说明书
2014/07/29 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
银行会计主管岗位职责
2014/10/01 职场文书
先进工作者推荐材料
2014/12/23 职场文书
2015年征兵工作总结
2015/07/23 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
MySQL导致索引失效的几种情况
2022/06/25 MySQL