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

点击mark-container中c-1按钮时,second-mark同data-id按钮无法同步激活的解决方法

解决同data-id按钮同步激活的问题

嘿,我来帮你搞定这个同步激活的问题!咱们先看看当前代码的核心问题:你点击按钮时只给当前点击的单个按钮加了active类,没把所有拥有相同data-id的.c-1按钮都选中并同步状态,所以其他容器里的同id按钮不会跟着高亮。

下面是修改后的完整方案,我会一步步说明改动点:

关键修改的JavaScript代码

$('.c-1').click(function() {
  // 获取当前点击按钮的data-id值
  var tab = $(this).attr('data-id');
  
  // 先清空所有按钮和详情模块的激活状态
  $('.c-1').removeClass('active');
  $(".c-1-details").removeClass('active');
  
  // 重点改动:选中所有data-id匹配的.c-1按钮,统一添加激活类
  $('.c-1[data-id="' + tab + '"]').addClass('active');
  
  // 激活对应id的详情模块
  $('#' + tab).addClass('active');
});

改动逻辑说明

  • 原来的$(this).addClass('active')只能作用于当前点击的按钮,现在换成属性选择器$('.c-1[data-id="' + tab + '"]'),就能选中页面上所有拥有相同data-id的.c-1按钮,实现同步激活。
  • 其余步骤和原逻辑保持一致:先重置所有元素的激活状态,再给目标元素添加样式,避免出现多个激活状态残留的问题。

完整可运行代码

<!DOCTYPE html>
<html>
<head>
  <style>
    .c-1-details { display: none; }
    .c-1-details.active { display: block; }
    .active { color: green; font-weight: bold; }
  </style>
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
</head>
<body>
  <div class="mark-container">
    <button class="c-1 active" data-id="tab-1">
      <p>for 1 btn</p>
    </button>
    <button class="c-1" data-id="tab-2">
      <p>for 2 btn</p>
    </button>
    <div class="c-1-details active" id="tab-1">
      <p>for 1 details</p>
    </div>
    <div class="c-1-details" id="tab-2">
      <p>for 2 details</p>
    </div>
  </div>
  <div class="second-mark">
    <ul>
      <button class="c-1 active" data-id="tab-1">current btn 1</button>
      <button class="c-1" data-id="tab-2">current btn2</button>
    </ul>
    <div class="c-1-details active" id="tab-1">
      display content 1
    </div>
    <div class="c-1-details" id="tab-2">
      display content 2
    </div>
  </div>

  <script>
    $('.c-1').click(function() {
      var tab = $(this).attr('data-id');
      $('.c-1').removeClass('active');
      $(".c-1-details").removeClass('active');
      $('.c-1[data-id="' + tab + '"]').addClass('active');
      $('#' + tab).addClass('active');
    });
  </script>
</body>
</html>

现在测试一下:不管点击mark-container还是second-mark里的按钮,所有同data-id的.c-1按钮都会同步变成绿色加粗的激活状态,对应的详情模块也会正常显示啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:26:01