深入了解外部js和jquery冲突的危害及应对策略

embedded/2024/9/25 21:28:18/

外部 JavaScript 库和 jQuery 冲突可能会导致意外行为、功能失效或页面崩溃等问题。这种冲突通常发生在使用多个 JavaScript 库时,它们可能会使用相同的全局变量名或者破坏了 jQuery 的工作方式。以下是一些可能导致冲突的情况以及相应的解决策略:

1. 冲突情况

a. 全局变量冲突

当外部库中定义了与 jQuery 或其他库相同的全局变量时,会导致冲突。

javascript">// 第三方库定义了全局变量$
var $ = function() {// some code
};
b. 修改 jQuery 原型

当其他库修改了 jQuery 的原型或者覆盖了 jQuery 的核心功能时,也会导致冲突。

javascript">// 第三方库修改了jQuery的原型
jQuery.fn.extend({// some code
});

2. 解决策略

a. 使用 jQuery.noConflict()

jQuery.noConflict() 方法可以释放对全局变量 $ 的控制权,从而避免全局变量冲突。

javascript">// 使用noConflict()方法释放对$的控制权
var jq = jQuery.noConflict();// 现在可以使用jq来代替$
jq(document).ready(function() {jq("button").click(function() {jq("p").text("jQuery is still working!");});
});
b. 使用 IIFE(立即执行函数表达式)

通过使用立即执行函数表达式,可以在局部作用域中引入 jQuery,避免与全局作用域中的其他库冲突。

javascript">// 使用IIFE引入jQuery,避免全局变量冲突
(function($) {$(document).ready(function() {$("button").click(function() {$("p").text("jQuery is still working!");});});
})(jQuery);
c. 将其他库引入到 jQuery.noConflict() 中

如果外部库与 jQuery 冲突,可以将其引入到 jQuery.noConflict() 中,这样它们就不会影响到全局作用域。

javascript">// 将第三方库引入到jQuery.noConflict()中
var jq = jQuery.noConflict();(function($) {// 在这里使用jq作为jQuery的别名
})(jq);

示例代码

假设我们有一个外部库定义了与 jQuery 相同的全局变量 $,并且我们想要使用 jQuery 来处理事件。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>jQuery Conflict Example</title><!-- 引入jQuery --><script src="https://code.jquery.com/jquery-3.6.0.min.js"></script><!-- 引入第三方库,它定义了与jQuery相同的全局变量$ --><script src="external-library.js"></script>
</head>
<body><button>Click me</button><p></p><script>javascript">// 使用jQuery.noConflict()释放对$的控制权var jq = jQuery.noConflict();// 现在可以使用jq来代替$jq(document).ready(function() {jq("button").click(function() {jq("p").text("jQuery is still working!");});});</script>
</body>
</html>

这样就可以避免全局变量冲突,并且正常使用 jQuery 来处理事件。


http://www.ppmy.cn/embedded/7319.html

相关文章

LeetCode 2007.从双倍数组中还原原数组:哈希表——从nlogn到n

【LetMeFly】2007.从双倍数组中还原原数组&#xff1a;哈希表——从nlogn到n 力扣题目链接&#xff1a;https://leetcode.cn/problems/find-original-array-from-doubled-array/ 一个整数数组 original 可以转变成一个 双倍 数组 changed &#xff0c;转变方式为将 original …

项目7-音乐播放器4+喜欢/收藏音乐

1.喜欢/收藏音乐模块设计 1.1 请求响应模块设计 请求&#xff1a; { post, /lovemusic/likeMusic data: id//音乐id } 响应&#xff1a; { "status": 0, "message": "点赞音乐成功", "da…

Android自带模拟器如何获得ROOT权限

如果在模拟器中不能切换到root权限&#xff0c;很可能是镜像使用的不对。 一.选择镜像标准&#xff1a; 1.运行在PC端选X86_64镜像&#xff0c;才能流畅运行 2.不带google api的镜像 二.步骤 在虚拟机管理器中新建AVD&#xff0c;并下载符合要求的镜像文件 三.验证

HTML5+CSS3小实例:菜单按钮的三种切换动画

实例:菜单按钮的三种切换动画 技术栈:HTML+CSS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initia…

链表OJ1——反转链表(c语言实现)

声明&#xff1a;我的链表OJ系列是针对无头单向不循环链表的题目 题目 题目来源&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 注意这里反转的是无头节点的单链表 思路1——就地反转 这个是基于前插操作改版而来的 struct ListNode {int val;struct ListNode *nex…

05.MySQL身份验证插件

MySQL身份验证插件 1.问题 MySQL客户端连接数据库的时候&#xff0c;提示这个错误 ERROR 2059 (HY000): Plugin caching_sha2_password could not be loaded: /usr/lib64/mariadb/plugin/caching_sha2_password.so: cannot open shared object file: No such file or direc…

CSS 01

CSS层叠样式表 HTML的局限性 HTML只关注内容的语义&#xff0c;可以做简单的样式&#xff0c;却带来了无限的臃肿和繁琐。 CSS CSS是层叠样式表的简称&#xff0c;也被称之为CSS样式表或级联样式表。CSS也是一种标记语言。   CSS主要用于设置HTML页面中的文本内容(字体、大…

npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3

在使用npm时&#xff0c;有时候您可能会遇到类似以下错误的权限问题&#xff1a; npm ERR! path /Users/apple/.npm/_cacache/index-v5/11/77/cf18d9ab54d565b57fb3 npm ERR! code EACCES npm ERR! errno -13 npm ERR! syscall open npm ERR! Error: EACCES: permission denie…