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

如何在Svelte的{#each}块中每4个月份元素包裹div

解决方案

要实现每4个月份用带背景图的div包裹,最清晰的方式是先对月份数据进行分组预处理,再通过嵌套的{#each}块渲染分组和组内月份,避免在原循环里写复杂的索引判断逻辑。

步骤1:预处理分组数据

在组件的<script>块中,将yearObj的条目转换成每4个一组的二维数组:

<script>
  // 假设yearObj是你的月份数据对象
  const monthEntries = Object.entries(yearObj);
  const groupedMonths = [];
  
  // 每4个月份分为一组
  for (let i = 0; i < monthEntries.length; i += 4) {
    groupedMonths.push(monthEntries.slice(i, i + 4));
  }
</script>

步骤2:嵌套循环渲染分组

修改原有的{#each}逻辑,先遍历分组,给每个分组外层添加带背景的div,再遍历组内的每个月份:

{#each groupedMonths as monthGroup}
  <!-- 分组外层div,这里添加背景图样式 -->
  <div class="month-group bg-cover bg-center" style="background-image: url('/your-background-image.jpg')">
    {#each monthGroup as [key, value], index (key)}
      <!-- 原有的单个月份渲染代码 -->
      <div class="inline-block bg-slate-900 flex flex-col flex-nowrap items-center p-0 border break-after-page">  
        <p class="block text-center py-1.5 ">{key}</p>
        <table class=" bg-slate-500 bg-opacity-50 w-full">
          <thead>
          <tr>
            {#each week_days as col}        
            {#if col == 'Sunday' || col == 'Saturday'}
              <th class="text-purple-900 border border-gray-900 shrink px-2.5 py-1.5">{col}</th>
            {:else}
              <th class="text-black border border-gray-900 shrink px-2.5 py-1.5">{col}</th>
            {/if}
            {/each}
          </tr>
          </thead>
          <tbody>
          {#each value as mon}            
          <tr>
          {#each mon as cell}     
            <td class="border border-gray-900 py-1.5">{cell}</td>
          {/each}
          </tr>
          {/each}
          </tbody>
        </table>
      </div> 
    {/each}
  </div>
{/each}

可选:给不同分组设置不同背景

如果需要每组使用不同背景图,可以根据分组索引动态设置:

{#each groupedMonths as monthGroup, groupIndex}
  <div 
    class="month-group bg-cover bg-center" 
    style="background-image: url('/bg-group-{groupIndex + 1}.jpg')"
  >
    <!-- 组内月份渲染 -->
  </div>
{/each}

或者通过CSS类名控制:

.month-group.group-1 { background-image: url('/bg-1.jpg'); }
.month-group.group-2 { background-image: url('/bg-2.jpg'); }
/* 以此类推 */

然后在模板中:

<div class="month-group bg-cover bg-center group-{groupIndex + 1}">

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 22:50:38