以下两段jq代码要是用js来写,怎么写的呀?

思否 问答 已采纳 👍 3 含 AI 优化版

问题

以下两段jq代码要是用js来写,怎么写的呀?

在 SegmentFault 查看原问题 →

由大模型辅助整理,保留原意,优化结构与可读性。

问题概述

提问者给出两段 jQuery 代码,希望了解如果不使用 jQuery,改用原生 JavaScript 该如何实现相同的功能(根据回答内容推测涉及选取多个元素并遍历处理)。

涉及技术

JavaScript、jQuery、DOM

期望结果

希望获得对应 jQuery 选择器/遍历逻辑的原生 JS 等价实现。

回答

原始回答

2021-01-11 document.querySelectorAll(".entry-content p img,.lonesome-img a img") 就是所有imgArray.form(document.querySelector(".entry-content p img,.lonesome-img a img")) 就是转换成数组,然后就可以快乐的 forEach 了你之前代码写的感觉也不是很对呀。去掉 jquery 也不是这么个去法呀,明明有 jquery 能省事

AI 优化 · 回答整理

解答思路

jQuery 中常见的「选中一组元素再遍历处理」的逻辑,原生 JS 可以用 document.querySelectorAll 配合 Array.from 转换为真正的数组后,再调用数组的 forEach 方法来实现。

示例代码

// 选中所有匹配的元素(返回 NodeList,类数组对象)
const imgList = document.querySelectorAll('.entry-content p img, .lonesome-img a img');

// 转换成真正的数组,才能使用完整的数组方法
const imgArray = Array.from(imgList);

imgArray.forEach((img) => {
  // 对每个 img 元素进行处理
});

详细说明

  • document.querySelectorAll(selector) 是原生 DOM API,功能上等价于 jQuery 的 $(selector):可以用逗号分隔多个选择器(如 .entry-content p img, .lonesome-img a img),一次性选出所有匹配的元素。它返回的是一个 NodeList(静态的类数组对象),本身不具备数组的所有方法(比如没有 .map.filter 等)。
  • Array.from(nodeList) 可以把 NodeList 转换成一个真正的数组,之后就能使用数组原生的 forEachmapfilter 等方法,写法上和 jQuery 遍历元素后调用 .each() 的体验类似。
  • 需要注意的是,如果项目里已经引入了 jQuery,其实没有必要为了「去 jQuery 化」而增加代码复杂度;只有在确实需要移除 jQuery 依赖、减少打包体积的场景下,才有必要用 querySelectorAll + Array.from 这类原生写法逐步替换。

小结

用原生 JS 替代 jQuery 的「选中元素并遍历」逻辑,核心组合是 document.querySelectorAll 负责选中元素、Array.from 负责转换为标准数组、forEach 负责遍历处理;是否要做这种替换,取决于项目是否真的需要摆脱 jQuery 依赖。

由大模型辅助整理,保留原意,补充结构与代码格式。

回答转载自 SegmentFault

评论

评论功能即将开放。你也可以通过 邮件GitHub Issue 反馈。