如何使用单行JavaScript代码通过getElementsByClassName处理多个元素?以及给定代码的单行写法是否正确?
把你的JavaScript代码写成单条语句的正确方式
当然没问题!咱们先看你给出的原代码:
var btns = document.getElementsByClassName("btn"); [].forEach.call(btns, function (btns) {btns.removeAttribute("disabled"); });
1. 合并为单条语句的简化写法
你可以直接把两行代码合并成一行,并且用箭头函数简化回调,让代码更简洁:
var btns = document.getElementsByClassName("btn"); [].forEach.call(btns, btn => btn.removeAttribute("disabled"));
如果你不需要单独保留btns变量,还可以进一步压缩,直接把DOM查询嵌入到forEach调用中:
[].forEach.call(document.getElementsByClassName("btn"), btn => btn.removeAttribute("disabled"));
另外,在现代浏览器中,用Array.from()把HTMLCollection转为真正的数组,写法会更直观易读:
Array.from(document.getElementsByClassName("btn")).forEach(btn => btn.removeAttribute("disabled"));
单行处理多个类名的元素
如果需要一次性处理多个不同类名的元素,这里提供两种方案:
方法1:用querySelectorAll(更推荐)
querySelectorAll支持完整的CSS选择器语法,能一次性选中多个类名的元素,单行写法非常清爽:
document.querySelectorAll(".btn, .cta").forEach(btn => btn.removeAttribute("disabled"));
(把.btn, .cta换成你需要的多个类名即可,用逗号分隔)
方法2:结合getElementsByClassName和数组合并
如果你坚持要用getElementsByClassName,可以把多个类名对应的HTMLCollection合并成数组后再统一处理:
[].concat(...[document.getElementsByClassName("btn"), document.getElementsByClassName("cta")]).forEach(btn => btn.removeAttribute("disabled"));
这里用扩展运算符...把每个HTMLCollection展开,再通过concat合并成一个数组,之后就能直接调用forEach遍历处理了。
内容的提问来源于stack exchange,提问作者patrick
相关产品推荐
相关产品推荐

