前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >移除jQuery好像也没那么难

移除jQuery好像也没那么难

作者头像
chuckQu
发布于 2024-07-10 06:05:40
发布于 2024-07-10 06:05:40
43200
代码可运行
举报
文章被收录于专栏:前端F2E前端F2E
运行总次数:0
代码可运行

jQuery 是一个非常实用且实用的库,但随着浏览器对 ES6 的广泛支持(截至撰写本文时超过 96%),现在可能是时候从 jQuery 过渡到原生 JavaScript 了。我最近从我的博客中移除了 jQuery,并发现自己不断地在谷歌上搜索一些模式。为了节省大家的时间,我编写了这个实用的参考指南,列出了一些最常见的 jQuery 模式及其在 JavaScript 中的等价物。我们将涵盖如何从这些概念和函数迁移到纯 JavaScript。

选择元素

选择一个或多个 DOM 元素是 jQuery 最基本的功能之一。在 JavaScript 中,$()jQuery() 的等价物是 querySelector()querySelectorAll(),它们同样可以使用 CSS 选择器。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery,选择所有 .box 的实例
$(".box");

// JavaScript,选择第一个 .box 的实例
document.querySelector(".box");

// 或者选择所有 .box 的实例
document.querySelectorAll(".box");

在选择中的所有元素上运行函数

querySelectorAll() 返回一个包含所有匹配查询元素的 NodeList。与 jQuery 可以直接对选择的所有元素调用方法不同,在纯 JavaScript 中,你需要使用 NodeList.forEach() 遍历这个 NodeList。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 隐藏所有 .box 的实例
$(".box").hide();

// JavaScript
// 遍历元素列表以隐藏所有 .box 的实例
document.querySelectorAll(".box").forEach(box => { box.style.display = "none" });

在一个元素内找到另一个元素

一个常见的 jQuery 模式是使用 .find() 选择一个元素内的另一个元素。你可以通过在一个元素上调用 querySelectorquerySelectorAll 来实现相同的效果,从而将选择范围限制在元素的子元素中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 选择 .container 内的第一个 .box 实例
var container = $(".container");
// 稍后...
container.find(".box");

// JavaScript
// 选择 .container 内的第一个 .box 实例
var container = document.querySelector(".container");
// 稍后...
container.querySelector(".box");

使用 parent(), next(), 和 prev() 遍历树

如果你希望遍历 DOM 来选择相对于另一个元素的兄弟或父元素,可以通过在该元素上访问 nextElementSiblingpreviousElementSiblingparentElement 来实现。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 返回 .box 的下一个、上一个和父元素
$(".box").next();
$(".box").prev();
$(".box").parent();

// JavaScript
// 返回 .box 的下一个、上一个和父元素
var box = document.querySelector(".box");
box.nextElementSibling;
box.previousElementSibling;
box.parentElement;

事件处理

无论你使用 .on().bind().live 还是 .click(),在 JavaScript 中的等价物是 .addEventListener

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
$(".button").click(function(e) { /* 处理点击事件 */ });
$(".button").mouseenter(function(e) {  /* 处理鼠标进入事件 */ });
$(document).keyup(function(e) {  /* 处理键盘松开事件 */  });

// JavaScript
document.querySelector(".button").addEventListener("click", (e) => { /* ... */ });
document.querySelector(".button").addEventListener("mouseenter", (e) => { /* ... */ });
document.addEventListener("keyup", (e) => { /* ... */ });

动态添加元素的事件监听

jQuery 的 .on() 方法使你可以处理动态添加到 DOM 中的元素的事件。要在没有 jQuery 的情况下实现类似功能,你可以在将元素添加到 DOM 时附加事件处理程序。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 处理 .search-result 元素的点击事件,即使它们是通过编程动态添加到 DOM 中的
$(".search-container").on("click", ".search-result", handleClick);

// JavaScript
// 创建并添加一个元素到 DOM
var searchElement = document.createElement("div");
document.querySelector(".search-container").appendChild(searchElement);
// 添加一个事件监听到元素
searchElement.addEventListener("click", handleClick);

触发和创建事件

通过调用 dispatchEvent() 可以实现手动触发事件。dispatchEvent() 方法可以在任何元素上调用,并将一个 Event 作为第一个参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 在 document 和 .box 上触发 myEvent
$(document).trigger("myEvent");
$(".box").trigger("myEvent");

// JavaScript
// 创建并分发 myEvent
document.dispatchEvent(new Event("myEvent"));
document.querySelector(".box").dispatchEvent(new Event("myEvent"));

元素样式处理

如果你使用 .css() 来更改元素的内联 CSS,通过 JavaScript 的 .style 属性设置不同属性的值来实现相同的效果。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 选择 .box 并将文本颜色更改为 #000
$(".box").css("color", "#000");

// JavaScript
// 选择第一个 .box 并将文本颜色更改为 #000
document.querySelector(".box").style.color = "#000";

使用 jQuery,你可以通过传递一个包含键值对的对象一次性设置多个样式。在 JavaScript 中,你可以一个一个地设置值,或设置整个样式字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 传递多个样式
$(".box").css({
  "color": "#000",
  "background-color": "red"
});

// JavaScript
// 设置颜色为 #000 和背景为红色
var box = document.querySelector(".box");
box.style.color = "#000";
box.style.backgroundColor = "red";

// 一次性设置所有样式(并覆盖任何现有样式)
box.style.cssText = "color: #000; background-color: red";

hide() 和 show()

.hide().show() 方法等同于访问 .style 属性并将 display 设置为 noneblock

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
// 隐藏和显示元素
$(".box").hide();
$(".box").show();

// JavaScript
// 通过将 "display" 更改为 "none" 和 "block" 来隐藏和显示元素
document.querySelector(".box").style.display = "none";
document.querySelector(".box").style.display = "block";

文档就绪

如果你需要在 DOM 完全加载后再附加事件到 DOM 对象,通常会使用 (document).ready() 或常用的简写 ()。我们可以通过监听 DOMContentLoaded 来轻松构造一个类似的函数来替代它。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// jQuery
$(document).ready(function() {
  /* 在 DOM 完全加载后执行操作 */
});

// JavaScript
// 定义一个方便的方法并使用它
var ready = (callback) => {
  if (document.readyState != "loading") callback();
  else document.addEventListener("DOMContentLoaded", callback);
}

ready(() => {
  /* 在 DOM 完全加载后执行操作 */
});

切换元素类名

通过 classList 属性,您可以方便地在 JavaScript 中添加、删除或切换类名。这些方法包括 add(), remove()toggle()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 jQuery
$(".box").addClass("focus");
$(".box").removeClass("focus");
$(".box").toggleClass("focus");

// 使用 JavaScript
var box = document.querySelector(".box");
box.classList.add("focus");
box.classList.remove("focus");
box.classList.toggle("focus");

如果需要同时添加或删除多个类,可以传入多个参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 添加 "focus" 和 "highlighted" 类,然后移除它们
var box = document.querySelector(".box");
box.classList.add("focus", "highlighted");
box.classList.remove("focus", "highlighted");

对于两个互斥的类,可以使用 classList.replace() 来替换类名:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 删除 "focus" 类并添加 "blurred"
document.querySelector(".box").classList.replace("focus", "blurred");

检查元素是否具有指定类

如果您只想在元素具有某个类时执行某些操作,可以使用 .classList.contains() 来代替 jQuery 的 .hasClass()

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 jQuery
if ($(".box").hasClass("focus")) {
  // 执行操作
}

// 使用 JavaScript
if (document.querySelector(".box").classList.contains("focus")) {
  // 执行操作
}

使用 .get() 或 .ajax() 进行网络请求

JavaScript 的 fetch() 方法可以用来进行网络请求,类似于 jQuery 的 ajax()get() 方法。fetch() 方法接收一个 URL 作为参数,并返回一个 Promise 对象,用于处理响应:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 jQuery
$.ajax({
  url: "data.json"
}).done(function(data) {
  // 处理数据
}).fail(function() {
  // 处理错误
});

// 使用 JavaScript
fetch("data.json")
  .then(response => response.json())
  .then(data => {
    // 处理数据
  })
  .catch(error => {
    // 处理错误
  });

创建元素

在 JavaScript 中,您可以使用 createElement() 方法动态创建一个元素,并传入标签名来指定要创建的元素类型:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建 div 和 span 元素
$("<div/>");
$("<span/>");

// 使用 JavaScript 创建 div 和 span 元素
document.createElement("div");
document.createElement("span");

要为这些元素添加内容,可以设置 textContent 属性,或者使用 createTextNode 创建文本节点并将其附加到元素上:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var element = document.createElement("div");
element.textContent = "文本内容";
// 或者创建一个文本节点并附加到元素上
var text = document.createTextNode("文本内容");
element.appendChild(text);

更新 DOM

如果要更改元素的文本或向 DOM 中添加新元素,可以使用 textContent 属性来读取或更新文本内容:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 使用 jQuery
$(".button").text("新文本");
$(".button").text(); // 返回 "新文本"

// 使用 JavaScript
document.querySelector(".button").textContent = "新文本";
document.querySelector(".button").textContent; // 返回 "新文本"

要创建一个新元素并将其添加到另一个元素中,可以使用 appendChild() 方法:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建 div 元素并附加到 .container
$(".container").append($("<div/>"));

// 创建一个 div 并附加到 .container
var element = document.createElement("div");
document.querySelector(".container").appendChild(element);

综合起来,下面是如何创建一个 div 元素,更新其文本和类名,并将其添加到 DOM 中的示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 创建一个 div 元素
var element = document.createElement("div");

// 更新其类名
element.classList.add("box");

// 设置其文本内容
element.textContent = "框内文本";

// 将元素附加到 .container 中
document.querySelector(".container").appendChild(element);

总结

以上内容并不是对所有原生 JavaScript 方法的详尽指南,但希望这些实用示例能帮助您更轻松地从 jQuery 过渡到纯 JavaScript。总而言之,我们讨论了以下方法:

  • 使用 querySelectorquerySelectorAll 选择元素
  • 使用 addEventListener 监听事件
  • 通过 style 属性更新 CSS 和样式
  • 通过 classList 属性操作类名
  • 使用 fetch 进行 AJAX 请求
  • 通过 dispatchEvent 触发事件
  • 使用 createElement 创建元素
  • 通过 textContent 更新文本
  • 使用 appendChild 向 DOM 中添加元素

本文译自:https://tobiasahlin.com/blog/move-from-jquery-to-vanilla-javascript/

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-06-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端F2E 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
微信公众号接入AI:通义千问、kimi、豆包
"通义千问"是阿里巴巴集团推出的大型语言模型,致力于成为人们的工作、学习、生活助手。功能包括多轮对话、文案创作、逻辑推理、多模态理解、多语言支持,能够跟人类进行多轮的交互,也融入了多模态的知识理解,且有文案创作能力,能够续写小说,编写邮件等。
编码如写诗
2024/08/30
1.8K0
微信公众号接入AI:通义千问、kimi、豆包
如何让Kimi AI成为班级微信公众号智能客服?
上学期帮小王子班级开通了公众号,后续也是我负责更新。平时看到别人公众号都有智能回复功能,感觉我这里没有,于是折腾的心又燃烧起来了。近两年网络最火的莫过于AI了,刚好看相关工具时发现了两个比较好玩的工具:kimi和扣子。
楚客追梦
2024/05/16
4620
如何让Kimi AI成为班级微信公众号智能客服?
小白如何在微信公众号接入大模型
推荐原因:文章详说明了聚类可视化的使用和什么是聚类可视化,文章代码部分丰富,可以去实操。
小胡同学
2024/11/18
1K0
三步带你把Kimi接入微信公众号
这里我们可以额外选择添加通义千问的qwen_audio_chat和qwen_vl_max插件,一个用来音频理解,一个用来通过自动分析图像内容并将其转换为描述性文本来进行高级图像识别。
zhouzhou的奇妙编程
2024/05/04
1.3K0
Coze扣子开发指南:搭建一个免费的微信公众号AI客服
运营微信公众号的自媒体,现在借助Coze扣子可以非常好用而且免费的7*24客服了,完全不需要任何编程基础,操作非常简单:
AIGC部落
2024/06/24
1.3K0
Coze扣子开发指南:搭建一个免费的微信公众号AI客服
如何快速搭建AI智能客服?
在这个AI时代,把AI客服融入你的业务,不仅能让客户体验升级,还能让你的服务更高效。那么,如何快速接入AI客服能力呢?接下来,我就带你一起探索用扣子Coze智能体模版+飞书表格搭建你的专属AI智能客服。
陈宇明
2025/02/26
6900
如何快速搭建AI智能客服?
微信公众号集成扣子免费实现智能助手
最近,在使用字节的智能产品扣子(Coze)时,发现可以将自定义的机器人发布到微信公众号(订阅号)。之前一直想为自己的订阅号接入智能助手,今天成功接入后还与家人分享了这个好消息。本文将介绍如何通过微信公众号集成扣子Bot功能,从而实现智能助手的搭建。结合微信公众号的强大功能和扣子的智能交互特性,我们可以为用户提供更便捷、更个性化的服务体验。
修己xj
2024/05/07
8880
微信公众号集成扣子免费实现智能助手
不用写一行代码,就能让你的公众号华丽变身成AI智能,超详细的攻略来了~
为了让你的公众号华丽变身成AI智能,我们用到了扣子AI,不用写一行代码,只需要三个步骤:创建Bot、关联公众号、发布Bot。
zhanyd
2024/04/29
1.5K0
不用写一行代码,就能让你的公众号华丽变身成AI智能,超详细的攻略来了~
使用coze国内版部署企业微信客服【方舟智能】
扣子(英文名称 Coze) 是新一代一站式 AI Bot 开发平台。无论你是否有编程基础,都可以在扣子平台上快速搭建基于 AI 模型的各类问答 Bot,从解决简单的问答到处理复杂逻辑的对话。而且你可以将搭建的 Bot 发布到各类社交平台和通讯软件上,让更多的用户与你搭建的 Bot 聊天。
AIGC新知
2024/10/08
2.6K1
使用coze国内版部署企业微信客服【方舟智能】
1分钟搭建DeepSeek增强版小程序!(支持联网搜索、图片理解、图片生成、解读链接、思维导图)
昨天搭建的《DeepSeek满血超标版(支持搜索、识图、读链接、生成图片、知识库)》已被制作成公开模版,一键复制即可使用。
陈宇明
2025/02/26
4160
1分钟搭建DeepSeek增强版小程序!(支持联网搜索、图片理解、图片生成、解读链接、思维导图)
Coze扣子开发指南:搭建一个Coze开发小助手
Coze扣子开发虽然不需要写代码,但是需要了解的流程和细节还是挺多的。基于Coze扣子官方文档,下面做了一个AI机器人,可以随时回答开发者的问题。
AIGC部落
2024/06/24
6420
Coze扣子开发指南:搭建一个Coze开发小助手
coze上线的新功能: Coze IDE 创建插件
Coze IDE 是扣子提供的在线编码和运行环境,允许您在多种技术栈中创建插件。待插件发布后,IDE 会帮助您托管运行代码,您无需关心环境配置、服务部署等步骤。此外,您可以使用 IDE 内置的 AI 助手获取代码方面的帮助,包括生成代码、修改代码、解释代码和添加注释。
AIGC新知
2024/10/08
1.3K0
coze上线的新功能: Coze IDE 创建插件
利用 Coze 搭建专属 AI 厨师助手
官方文档也给出了更加全面的介绍以及他的特点: www.coze.cn/docs/guides…
心安事随
2024/07/29
2670
利用 Coze 搭建专属 AI 厨师助手
现在起,真正的强者敢于直面「扣子」的「模型广场」
“扣子”有一个相当大的优势,就是支持国内知名大语言模型作为底座,还免费,许多 “AI bot" 孕育而生。
机器之心
2024/06/17
2180
现在起,真正的强者敢于直面「扣子」的「模型广场」
你最近被夸了吗?这个AI Agent治愈了他的低谷期
首先登录Coze平台(https://www.coze.cn/),点击左上角的"+"号创建新智能体。起一个温暖的名字,比如"暖心夸夸酱",选择一个可爱的头像,点击确认。
一臻AI
2025/04/26
930
你最近被夸了吗?这个AI Agent治愈了他的低谷期
Kimi+Langchain+FastGPT:文档转LLM微调数据集 / QA问答对生成、Kimi 128KAPI免费接入!
今天我将介绍:如何使用Kimi API将文档转换为LLM指令监督微调数据集(Alpaca 格式)以及 如何部署FastGPT并接入Kimi API:
AI进修生
2024/12/02
6760
Kimi+Langchain+FastGPT:文档转LLM微调数据集 / QA问答对生成、Kimi 128KAPI免费接入!
全民AI的时代,如何创建一个属于自己的AI机器人
创建一个属于自己的机器人是一个令人兴奋的项目,而使用Coze(扣子)平台可以简化这个过程,扣子是新一代 AI 应用开发平台。无论你是否有编程基础,都可以在扣子上快速搭建基于大模型的各类 Bot,并将 Bot 发布到各个社交平台、通讯软件或部署到网站等其他渠道。
一点sir
2024/05/20
5240
全民AI的时代,如何创建一个属于自己的AI机器人
如何搭建DeepSeek满血超标版?(支持搜索、识图、读链接、生成图片、知识库)
市面上有很多解决方案,有本地部署方案也有API版本,这些方案对于小白来说操作起来都非常的复杂,接下来我告诉大家一个无需部署,零代码的解决方案可以搭建一个DeepSeek满血超标版(支持搜索、传图、读取链接、生成图片、思维导图、个人知识库)
陈宇明
2025/02/26
3750
如何搭建DeepSeek满血超标版?(支持搜索、识图、读链接、生成图片、知识库)
使用扣子 coze 搭建你的专属程序员鼓励师女友
👋 你好,我是 Lorin 洛林,一位 Java 后端技术开发者!座右铭:Technology has the power to make the world a better place.
Lorin 洛林
2024/03/11
1.2K0
扣子空间+无限 MCP 服务=通用 Agent 王炸!
在扣子空间用户仅需提供 “一句话指令“ 即可实现任务的自主思考、规划与执行,类似 Manus 定位通用型 Agent。
陈宇明
2025/04/27
2930
扣子空间+无限 MCP 服务=通用 Agent 王炸!
推荐阅读
相关推荐
微信公众号接入AI:通义千问、kimi、豆包
更多 >
LV.1
这个人很懒,什么都没有留下~
目录
  • 选择元素
    • 在选择中的所有元素上运行函数
    • 在一个元素内找到另一个元素
    • 使用 parent(), next(), 和 prev() 遍历树
  • 事件处理
    • 动态添加元素的事件监听
    • 触发和创建事件
  • 元素样式处理
    • hide() 和 show()
  • 文档就绪
  • 切换元素类名
    • 检查元素是否具有指定类
  • 使用 .get() 或 .ajax() 进行网络请求
  • 创建元素
  • 更新 DOM
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档