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

多个元素共享同一类名时如何仅对单个目标元素执行DOM修改?

实现思路
  • 不需要为每行设置唯一类名,通过基础事件绑定逻辑即可精准识别被点击的行:
    1. 先完善HTML结构:在每个.option容器内部添加隐藏的描述内容区域,默认设置为不显示
    2. 遍历所有.option元素绑定点击事件,通过事件回调的currentTarget属性直接获取当前被点击的行元素
    3. 仅操作当前点击行内的描述区域和箭头样式即可,不会影响其他行
完整实现代码示例

HTML调整

<section class = "section section-menu">
    <div class = "option">
        <!-- 新增头部容器,包裹原有标题、图标和箭头 -->
        <div class="option-header">
            <div class = "option-container">
                <img src = "img/Breakfast-Figma.png" alt="早餐图片">
                <h3 class = "option-text">&nbsp;&nbsp;早餐</h3>
            </div>
            <ion-icon name="chevron-up-circle-outline" class = "dropdown-arrow"></ion-icon>
        </div>
        <!-- 新增的描述区域,默认隐藏 -->
        <div class="option-description">
            这里放置早餐分类对应的具体餐品、价格等描述内容
        </div>
    </div>
    <!-- 剩余7个分类的option都按照上述结构调整即可,原有属性无需修改 -->
</section>
<script type="module" src="https://unpkg.com/ionicons@5.5.2/dist/ionicons/ionicons.esm.js"></script>

新增/调整CSS

.section-menu {
  margin-top: 5%;
}
.option {
  width: 75%;
  margin: 0 auto 16px;
  display: flex;
  /* 改为纵向排列,让描述区域显示在标题下方 */
  flex-direction: column;
}
.option-header {
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.option-container {
  width: max-content;
  display: flex;
}
.option-text {
  float: right;
  margin: auto;
  font-family: Apercu-light;
}
.dropdown-arrow {
  height: 60px;
  font-size: 22px;
  float: right;
  margin: auto;
  margin-right: 5%;
  /* 新增箭头旋转过渡效果 */
  transition: transform 0.2s ease;
}
/* 新增描述区域默认样式 */
.option-description {
  display: none;
  padding: 12px 0 12px 60px;
  font-family: Apercu-light;
}
/* 展开状态样式控制 */
.option.expanded .option-description {
  display: block;
}
.option.expanded .dropdown-arrow {
  transform: rotate(180deg);
}

JS逻辑

// 获取所有菜单行元素
const menuOptions = document.querySelectorAll('.option');
// 遍历绑定点击事件
menuOptions.forEach(option => {
    option.addEventListener('click', function() {
        // 切换当前点击行的展开状态即可,所有展示逻辑由CSS控制
        this.classList.toggle('expanded');
    })
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 00:57:03