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

如何通过数组对HTML多个元素批量执行setAttribute操作

错误原因

你代码中allSec数组存储的是字符串格式的元素ID,不是DOM元素对象,字符串本身没有setAttribute方法才会抛出类型错误。
之前直接写1Sec.setAttribute可以正常运行,是因为浏览器默认会把页面中带id属性的DOM元素挂载到window全局对象上,你可以直接用id作为变量名调用到对应的DOM元素。

修正代码

你只需要在遍历ID的时候,通过ID获取到对应的DOM元素再操作属性即可,还可以顺带补充保留元素的显示逻辑,避免重复操作:

const hideOthers = (keepSecId) => {
  const allSecIds = ["1Sec", "2Sec", "3Sec", "4Sec", "5Sec", "6Sec", "7Sec"];
  allSecIds.forEach(secId => {
    const secElement = document.getElementById(secId);
    if (secId !== keepSecId) {
      secElement.setAttribute("hidden", true);
    } else {
      // 保证要保留的元素处于显示状态
      secElement.removeAttribute("hidden");
    }
  })
};

调用方法示例:需要保留id为1Sec的元素时,执行hideOthers("1Sec")即可。

更灵活的优化方案

如果后续可能新增/删除需要控制的section,你可以给所有需要参与显隐控制的section加一个统一的类名,比如switch-section,就不需要手动维护ID数组了:

const hideOthers = (keepSecId) => {
  // 直接获取所有需要控制的section元素
  const allSec = document.querySelectorAll('.switch-section');
  allSec.forEach(sec => {
    sec.id === keepSecId ? sec.removeAttribute("hidden") : sec.setAttribute("hidden", true);
  })
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 08:06:02