You need to enable JavaScript to run this app. Blade模板foreach循环下数值≤20时td加红类仅首条生效问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

Blade模板foreach循环下数值≤20时td加红类仅首条生效问题咨询

问题原因

HTML规范要求页面内id属性必须全局唯一,你在循环渲染时给所有目标td都设置了相同的id="changecolor",导致document.getElementById只能匹配到页面中第一个出现的该id元素,因此只有第一条符合条件的元素生效。

修复步骤

1. 修改Blade模板

将目标td的id属性替换为class属性,用于批量匹配所有对应元素:

@foreach ($scaduti as $item )
    <tr>
       <td>{{$item->name}}</td>
       <td>{{$item->lotto}}</td>
       <td>{{carbon\Carbon::createFromFormat('Y-m-d', $item->data_di_scadenza)->format('d-m-Y')}}</td>
       <td>{{$item->sector->settore}}</td>
       <td>{{$item->sector->scaffale}}</td>
       <!-- 把id换成class -->
       <td class="stock-qty">{{$item->sector->quantita_rimanente - $item->sector->quantita_bloccata}}</td>
       <td>{{$item->sector->quantita_bloccata}}</td>
    </tr>
 @endforeach

2. 修改JS逻辑

遍历所有匹配class的td元素,逐个判断数值后添加样式类:

// 选中所有库存数量td元素
const stockQtyList = document.querySelectorAll('.stock-qty')

stockQtyList.forEach(td => {
    // 转换为数字避免字符串比较异常
    const num = Number(td.textContent.trim())
    if(num <= 20) {
        td.classList.add('changetored')
    }
})
更优方案:Blade直接判断添加类

无需依赖前端JS,后端渲染时直接判断数值添加类,性能更高且不会出现样式延迟闪烁问题:

@foreach ($scaduti as $item )
    @php
        // 提前计算可用库存
        $availableQty = $item->sector->quantita_rimanente - $item->sector->quantita_bloccata;
    @endphp
    <tr>
       <td>{{$item->name}}</td>
       <td>{{$item->lotto}}</td>
       <td>{{carbon\Carbon::createFromFormat('Y-m-d', $item->data_di_scadenza)->format('d-m-Y')}}</td>
       <td>{{$item->sector->settore}}</td>
       <td>{{$item->sector->scaffale}}</td>
       <!-- 直接判断添加类 -->
       <td class="{{ $availableQty <= 20 ? 'changetored' : '' }}">{{ $availableQty }}</td>
       <td>{{$item->sector->quantita_bloccata}}</td>
    </tr>
 @endforeach

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.09 21:30:04