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

如何在所属.section完全展开时隐藏.demo-box并显示同层级.demo-box2

问题核心原因

你现有代码不生效的核心原因是:demoBox1、demoBox2是通过Array.from(document.querySelectorAll())得到的数组集合,数组本身不存在style属性,直接对数组设置display样式不会作用到内部的DOM元素上。


方案1:纯CSS实现(更推荐,无需修改现有JS逻辑)

利用你代码中已经给展开的section添加的is-expanded类做样式匹配即可:

/* 默认状态:显示demo-box,隐藏demo-box2 */
.demo-box2 {
  display: none;
}
/* 展开状态:隐藏当前展开区块的demo-box,显示demo-box2 */
.section.is-expanded .demo-box {
  display: none;
}
.section.is-expanded .demo-box2 {
  display: block;
}

方案2:JS代码修正

如果需要用JS控制显示状态,修改_openSection和_closeSection方法,只操作当前被操作section内的对应元素即可(原来全局声明的demoBox1、demoBox2可以直接删除):

function _openSection(element) {
  if (!element.classList.contains(expandedClass)) {
    element.classList.add(expandedClass);
    wrapper.classList.add(hasExpandedClass);
    // 只操作当前展开区块内的两个盒子
    const curDemoBox1 = element.querySelector('.demo-box');
    const curDemoBox2 = element.querySelector('.demo-box2');
    curDemoBox1.style.display = "none";
    curDemoBox2.style.display = "block";
  }
}

function _closeSection(element) {
  if (element.classList.contains(expandedClass)) {
    element.classList.remove(expandedClass);
    wrapper.classList.remove(hasExpandedClass);
    // 只操作当前关闭区块内的两个盒子
    const curDemoBox1 = element.querySelector('.demo-box');
    const curDemoBox2 = element.querySelector('.demo-box2');
    curDemoBox1.style.display = "block";
    curDemoBox2.style.display = "none";
  }
}

如果你的需求是展开任意一个section时,隐藏所有区块的demo-box、显示所有区块的demo-box2,则可以直接对原数组做遍历操作:

// 展开时替换原有的demoBox1.style、demoBox2.style赋值逻辑
demoBox1.forEach(box => box.style.display = "none");
demoBox2.forEach(box => box.style.display = "block");

// 关闭时替换原有的demoBox1.style、demoBox2.style赋值逻辑
demoBox1.forEach(box => box.style.display = "block");
demoBox2.forEach(box => box.style.display = "none");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.13 09:18:03