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

点击DIV追加至目标容器并实现类Tabs切换功能的问题求助

解决选中日期内容的Tabs切换与重复克隆问题

我来帮你搞定这个问题!你现在的核心问题有两个:一是每次点击都会重复克隆并追加新元素到.selected-day容器里,导致内容越积越多;二是选中状态的切换逻辑没处理好,所有克隆出来的元素都被加上了selected类,自然就全部显示了。咱们一步步调整:

第一步:给每个日期内容加唯一标识

先给原始的.day-col-content加上唯一的data-date-id属性,这样我们就能判断某个日期的内容是否已经被克隆过,避免重复添加:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<div class="actual-weather">
 <span class="selected-day"></span>
</div>
<div class="days-box">
 <div class="day-col">
 <div class="day-col-content" data-date-id="1">
 <p class="weather"> content 1 </p>
 </div>
 </div>
 <div class="day-col">
 <div class="day-col-content" data-date-id="2">
 <p class="weather"> content 2 </p>
 </div>
 </div>
 <div class="day-col">
 <div class="day-col-content" data-date-id="3">
 <p class="weather"> content 3 </p>
 </div>
 </div>
</div>

第二步:重构JS逻辑,实现“存在则切换,不存在则克隆”

修改点击事件的逻辑,先检查目标日期的内容是否已经在.selected-day里,没有的话再克隆追加;同时只给当前选中的克隆元素添加selected类,其他的移除:

$('.day-col-content').on('click', function() {
  // 1. 标记左侧选中的日期块
  $('.day-col').removeClass('selected');
  $(this).parent().addClass('selected');

  // 2. 获取当前日期的唯一ID
  const dateId = $(this).data('date-id');
  // 3. 检查.selected-day里是否已有该日期的内容
  const $targetContent = $('.selected-day .day-col-content[data-date-id="' + dateId + '"]');

  if ($targetContent.length === 0) {
    // 4. 如果没有,克隆并追加,同时保留ID标识
    const $clonedContent = $(this).clone();
    $clonedContent.appendTo('.selected-day');
  }

  // 5. 切换选中状态:隐藏所有内容,只显示当前选中的
  $('.selected-day .day-col-content').removeClass('selected');
  $('.selected-day .day-col-content[data-date-id="' + dateId + '"]').addClass('selected');
});

第三步:调整CSS,确保样式生效

原CSS的选择器有点小问题,把.selected-day .selected-day这个错误选择器删掉,同时确保.selected-day下的内容默认隐藏,只有选中的才显示:

.actual-weather { 
  float: left; 
  width: 100%; 
  margin-bottom: 20px; 
  text-align: center; 
}

.selected-day { 
  float: left; 
  width: 100%; 
}

.selected-day .day-col-content { 
  display: none; 
}

.selected-day .day-col-content.selected { 
  display: block; 
}

.days-box { 
  float: left; 
  width: 100%; 
  display: flex; 
  justify-content: center; 
}

.day-col { 
  float: left; 
  width: 130px; 
  height: 130px; 
  position: relative; 
  margin: 0 10px 10px; 
  text-align: center; 
  cursor: pointer; 
  background: red; 
}

.day-col.selected { 
  background: blue; 
}

.day-col .day-col-content { 
  width: 100%; 
  position: absolute; 
  margin: 0; 
  top: 50%; 
  -ms-transform: translateY(-50%); 
  transform: translateY(-50%);
}

效果说明

现在点击左侧的日期块:

  • 如果是第一次点击,会把对应的内容克隆到.selected-day里并显示;
  • 如果是已经克隆过的日期,直接切换显示该内容,不会重复添加;
  • 左侧的选中日期块会同步高亮,右侧只显示当前选中的日期内容,完美实现Tabs切换效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:11:58