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

如何用jQuery实现点击项显示对应info div并添加active类(DOM非相邻)

用jQuery实现跨DOM结构的点击切换内容功能

嘿,这个需求其实用jQuery结合data-*属性就能轻松搞定,刚好能解决info div不在相邻位置的问题,我给你一步步拆解:

第一步:调整HTML结构,用data属性建立关联

首先我们要给每个.item添加data-target属性,值对应对应.info元素的ID,这样就能把点击的item和要显示的info绑定起来,不管info嵌套在哪里都能找到它:

<div class="item" data-target="food-info">Food</div>
<div class="item" data-target="music-info">Music</div>
<div class="item" data-target="transport-info">Transport</div>

<!-- 不管info嵌套在哪个容器里都没问题,比如这里放在一个独立的容器中 -->
<div class="some-other-container">
  <div id="food-info" class="info active">这里是Food的详细内容...</div>
  <div id="music-info" class="info">这里是Music的详细内容...</div>
  <div id="transport-info" class="info">这里是Transport的详细内容...</div>
</div>

第二步:写CSS控制显示/隐藏

默认把所有.info隐藏,只有带active类的才显示:

.info {
  display: none; /* 默认隐藏所有信息块 */
}
.info.active {
  display: block; /* 激活的信息块显示 */
}

第三步:jQuery核心逻辑

点击item时,先移除所有info的active类(隐藏其他),再给对应的info加上active类:

$(document).ready(function() {
  // 给所有.item绑定点击事件
  $('.item').on('click', function() {
    // 第一步:先把所有info的active类去掉,隐藏其他内容
    $('.info').removeClass('active');
    // 第二步:获取当前点击item对应的target ID(从data-target属性里拿)
    const targetInfoId = $(this).data('target');
    // 第三步:给对应的info元素添加active类,显示它
    $('#' + targetInfoId).addClass('active');
  });
});

为什么用data属性?

因为你的info div不是相邻元素,用data属性相当于给每个item和info做了一个“配对标记”,完全不依赖DOM结构的位置,不管info嵌套得多深,只要ID对应上就能精准找到,比依赖相邻元素的方法灵活太多啦~

内容的提问来源于stack exchange,提问作者Al-76

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:36:40