You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中如何批量选中多个ID元素简化重复classList操作?

你可以使用CSS属性前缀选择器配合querySelectorAll批量选中所有id以item-link开头的元素,优化后的代码如下:

基础优化版(保留原函数逻辑)

// 提前缓存DOM元素,避免每次调用函数重复查询DOM,提升性能
const sideOpen1 = document.getElementById('side-open1')
// 选中所有id以item-link开头的元素
const itemLinks = document.querySelectorAll('[id^="item-link"]')

function side1() {
  sideOpen1.classList.remove('side-open-dpn')
  itemLinks.forEach(el => el.classList.add('side-open-dpn'))
}

function back1() {
  sideOpen1.classList.add('side-open-dpn')
  itemLinks.forEach(el => el.classList.remove('side-open-dpn'))
}

如果担心页面存在其他id以item-link开头的无关元素,也可以用逗号分隔的选择器精确指定5个元素:

const itemLinks = document.querySelectorAll('#item-link1, #item-link2, #item-link3, #item-link4, #item-link5')

进阶精简版(合并逻辑)

两个函数逻辑完全相反,可以合并为一个切换函数进一步精简代码:

const sideOpen1 = document.getElementById('side-open1')
const itemLinks = document.querySelectorAll('[id^="item-link"]')
const hideClass = 'side-open-dpn'

// 传入true对应原side1效果,传入false对应原back1效果
function toggleSide(isShowSide) {
  sideOpen1.classList.toggle(hideClass, !isShowSide)
  itemLinks.forEach(el => el.classList.toggle(hideClass, isShowSide))
}

classList.toggle的第二个参数是布尔值,为true时强制添加类,为false时强制移除类,正好适配两种相反的操作逻辑。

内容的提问来源于stack exchange,提问作者user15563812

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 20:36:03