以下两段jq代码要是用js来写,怎么写的呀?
问题
以下两段jq代码要是用js来写,怎么写的呀?
由大模型辅助整理,保留原意,优化结构与可读性。
问题概述
提问者给出两段 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转换成一个真正的数组,之后就能使用数组原生的forEach、map、filter等方法,写法上和 jQuery 遍历元素后调用.each()的体验类似。- 需要注意的是,如果项目里已经引入了 jQuery,其实没有必要为了「去 jQuery 化」而增加代码复杂度;只有在确实需要移除 jQuery 依赖、减少打包体积的场景下,才有必要用
querySelectorAll + Array.from这类原生写法逐步替换。
小结
用原生 JS 替代 jQuery 的「选中元素并遍历」逻辑,核心组合是 document.querySelectorAll 负责选中元素、Array.from 负责转换为标准数组、forEach 负责遍历处理;是否要做这种替换,取决于项目是否真的需要摆脱 jQuery 依赖。
由大模型辅助整理,保留原意,补充结构与代码格式。
回答转载自 SegmentFault