Thymeleaf:如何在使用 th:each 时排除外部标签?
Thymeleaf: How to exclude outer tag when using th:each?
Thymeleaf 2.1.4 官方文档演示了 for each
用法如下:
<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
...
</tr>
它在每次迭代中生成一个<tr>
,非常适合这种情况。但是在我的例子中,我不需要外部标签(这里是 <tr>
)。
我的用例是以递归方式生成 <bookmark>
标签,不包括其他标签,并且 <bookmark>
标签必须包含名称和 href 属性。
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="locationBookmark(location)">
<bookmark th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</bookmark>
</div>
</body>
</html>
包括方:
<bookmark th:include="bookmark : locationBookmark(${rootLocation})"/>
非常感谢。
您可以使用 DIV
标签或任何其他 HTML 标签进行循环。这不会生成 TR
标签。但是要使 table 正确呈现,您需要在 TR
标签内包含 TD
标签。
<div th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
</div>
我知道怎么解决了,很简单,在外层标签上加上th:remove="tag"
就可以了。
即使可以使用 th:remove="tag"
来完成,我还是建议您使用 th:block
<th:block th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</th:block>
这不完全是 OP 要求的,但它可能对某些人有用:
也可以删除标签有条件地:
<div class="myConditionalOuterDiv" th:remove="${condition}? tag"}>
<span> I'm always there </span>
</div>
这会删除父元素,但会保留子元素。
来源here
Thymeleaf 2.1.4 官方文档演示了 for each
用法如下:
<tr th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
...
</tr>
它在每次迭代中生成一个<tr>
,非常适合这种情况。但是在我的例子中,我不需要外部标签(这里是 <tr>
)。
我的用例是以递归方式生成 <bookmark>
标签,不包括其他标签,并且 <bookmark>
标签必须包含名称和 href 属性。
<!DOCTYPE html SYSTEM "http://www.thymeleaf.org/dtd/xhtml1-strict-thymeleaf-4.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:th="http://www.thymeleaf.org">
<body>
<div th:fragment="locationBookmark(location)">
<bookmark th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</bookmark>
</div>
</body>
</html>
包括方:
<bookmark th:include="bookmark : locationBookmark(${rootLocation})"/>
非常感谢。
您可以使用 DIV
标签或任何其他 HTML 标签进行循环。这不会生成 TR
标签。但是要使 table 正确呈现,您需要在 TR
标签内包含 TD
标签。
<div th:each="prod : ${prods}" th:class="${prodStat.odd}? 'odd'">
<td th:text="${prod.name}">Onions</td>
<td th:text="${prod.price}">2.41</td>
</div>
我知道怎么解决了,很简单,在外层标签上加上th:remove="tag"
就可以了。
即使可以使用 th:remove="tag"
来完成,我还是建议您使用 th:block
<th:block th:each="map : ${location.subMaps}">
<bookmark th:name="${map.name}"
th:href="'#'+${map.id}" th:include=":: locationBookmark(${map})">
</bookmark>
</th:block>
这不完全是 OP 要求的,但它可能对某些人有用:
也可以删除标签有条件地:
<div class="myConditionalOuterDiv" th:remove="${condition}? tag"}>
<span> I'm always there </span>
</div>
这会删除父元素,但会保留子元素。
来源here