freemarker中的交替表行颜色

its*_*dok 7 templates freemarker

使用freemarker进行备用行着色的好方法是什么?

这真的是最好的方式吗?

<#assign row=0>
<#list items as item>
    <#if (row % 2) == 0>
        <#assign bgcolor="green">
    <#else>
        <#assign bgcolor="red">
    </#if>
    <tr style='background-color: ${bgcolor}'><td>${item}</td></tr>
    <#assign row = row + 1>
</#list>
Run Code Online (Sandbox Code Playgroud)

我试过这样做:

<#assign row=0>
<#list items as item>
    <tr style='background-color: ${(row % 2) == 0 ? "green" : "blue"}'><td>${item}</td></tr>
    <#assign row = row + 1>
</#list>
Run Code Online (Sandbox Code Playgroud)

但显然你不能在那里使用三元运算符.

注意:我想我之前应该提到它,但我不能使用css类或javascript,因为这个HTML会进入电子邮件消息.

小智 27

class='${["odd", "even"][item_index%2]}'
Run Code Online (Sandbox Code Playgroud)

  • 注意:将上面的“item”替换为列表的变量。例如,&lt;#list array as line&gt; ... [line_index%2] ... &lt;/#list&gt; (2认同)

and*_*ynu 14

如果你有一系列的表,你可能想要做一点功能.

<#function zebra index>
  <#if (index % 2) == 0>
    <#return "white" />
  <#else>
    <#return "#efefef" />
  </#if>
</#function>

<#assign arr=["a","b","c","d"] />
<table>
<#list arr as n>
  <tr><td bgcolor=${zebra(n_index)}>${n}</td></tr>
</#list>
</table>
Run Code Online (Sandbox Code Playgroud)

_index内建时不必让自己和增量索引变量使用列表可以节省您的.

  • 请使用"干净"的CSS:在需要时添加相关的类(class ="odd"或class ="even")然后相应地在CSS中设置样式(即.even {background-color:gray;} .odd { background-color:white;} (3认同)

小智 7

使用freemarker,您可以使用string内置:

<#list items as item>
   <tr style='background-color: ${((item_index % 2)==0)?string("green", "blue")}'><td>${item}</td></tr>
</#list>
Run Code Online (Sandbox Code Playgroud)