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

如何用Javascript的forEach优化多按钮显隐元素的冗余代码

错误原因

你遇到的opencard.forEach is not a function报错,核心是this.getAttribute("opencard")获取到的是字符串类型的选择器值(例如.full-card-campfer),并非DOM元素集合,本身不具备forEach遍历方法,需要先通过该选择器查询到对应的目标元素集合后再做展示操作。

修复后可运行代码

JavaScript 部分

const squares = document.querySelectorAll('.table-of-contents-college-all label');
const allwoodcards = document.querySelectorAll('.all-wood-cards'); 

squares.forEach(square => {
  square.addEventListener('click', clickOutcome)
})

function clickOutcome() {
  // 拿到选择器字符串
  const targetSelector = this.getAttribute("opencard");
  // 先关闭所有卡片
  allwoodcards.forEach(woodcard => {
    woodcard.style.display = "none"
  });
  // 通过选择器查询到当前要展示的3个卡片,再遍历设置展示
  document.querySelectorAll(targetSelector).forEach(openup => {
    openup.style.display = "block";
  });
}

HTML 注意事项

你提供的示例HTML中部分.full-card-pine标签没有闭合,实际使用时请补全闭合标签避免样式/选择器异常:

<body>
   <div class="tableofcontentscollege1 table-of-contents-college-all">
            <label  type="button" 
                    id="campfer-table-button"
                    opencard=".full-card-campfer"
                    >
                    Campfer
            </label>
            <label  type="button"
                    opencard=".full-card-pine"
                    >
                    Pine
            </label>
   </div>
   <div class="full-card-campfer all-wood-cards"
        id="campferfullcard1">
   </div>
   <div class="full-card-campfer all-wood-cards"
        id="campferfullcard2">
   </div>
   <div class="full-card-campfer all-wood-cards"
        id="campferfullcard3">
   </div>
   <!-- 补全闭合标签 -->
   <div class="full-card-pine all-wood-cards"
        id="pinefullcard1">
   </div>
   <div class="full-card-pine all-wood-cards"
        id="pinefullcard2">
   </div>
   <div class="full-card-pine all-wood-cards"
        id="pinefullcard3">
   </div>
</body>
扩展优化建议

如果需要符合HTML规范,建议把自定义的opencard属性改为data-opencard,读取时用this.dataset.opencard即可,避免自定义属性不符合标准带来的潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 02:48:03