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

Spring Boot项目中如何隐藏或显示th:each循环生成的所有div元素

问题解决方法

根因说明

HTML规范要求id属性在单个页面内全局唯一,你通过th:each循环给所有生成的div设置了相同的barList id,DOM选择器默认只会匹配到第一个符合id规则的元素,因此只有第一个div的隐藏生效。

具体修改步骤

1. 替换id为class属性

将循环生成的div的唯一标识从id改为可复用的class:

<button class="category" onclick="showBar()">BAR</button>

<!-- 将id="barList"替换为class="barList" -->
<div class="barList" th:each="m: ${MERCH}" th:if="${m.cat.catId}==1">
<tr>
    <p th:text="${m.getMName()}"></p><br>
    <p th:text="${#numbers.formatInteger(m.price, 1, 'COMMA')}"></p>
</tr>
</div>

2. 修改JS逻辑匹配所有元素

两种实现方式可选:

jQuery版本

function showBar() {
    // 类选择器以.开头,会选中所有class为barList的元素执行隐藏
    $('.barList').hide();
    // 如果需要切换显示/隐藏,可替换为$('.barList').toggle()
}

原生JS版本(无需依赖jQuery)

function showBar() {
    document.querySelectorAll('.barList').forEach(element => {
        element.style.display = 'none';
        // 切换显示/隐藏可以用下面的逻辑
        // element.style.display = element.style.display === 'none' ? 'block' : 'none'
    })
}

额外优化提示

你的现有代码中<div>直接嵌套<tr>不符合HTML规范,<tr>标签必须放在<table>或<tbody>内部使用,否则可能出现布局渲染异常,建议同步调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 07:45:07