树枝,加上第一课和最后一课
比方说,我有这样的for循环:
{% for elem in arrMenu %} <div class="topmenu-button"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %}
在这种forms下,它会呈现如下:
<div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div>
如何可以帮助我添加第一个和最后一个类的div,所以我会有这样的结果:
<div class="topmenu-button first"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button"><a href="url">name</a></div> <div class="topmenu-button last"><a href="url">name</a></div>
你可以使用“特殊variables” loop.first
和loop.last
来达到你想要的。
链接
{% for elem in arrMenu %} {% if loop.first %} <div class="topmenu-button first"> {% elseif loop.last %} <div class="topmenu-button last"> {% else %} <div class="topmenu-button"> {% endif %} <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %}
编辑:取决于多less你关心的“一例”,你可能需要这样的解决scheme。
{% for elem in arrMenu %} {% set classes = ["topmenu-button"] %} {% if loop.first %}{% set classes = classes|merge(["first"]) %}{% endif %} {% if loop.last %}{% set classes = classes|merge(["last"]) %}{% endif %} <div class="{{ classes|join(" ") }}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %}
由于一个循环不能同时first
和结束,所以我不想使用elseif
并写入(DRY – 如果将来必须更改topmenu-button
怎样?):
{% for elem in arrMenu %} {% set append %} {% if loop.first %}first{% endif %} {% if loop.last %}last{% endif %} {% endset %} <div class="topmenu-button {{ append }}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %}
或更简洁:
{% for elem in arrMenu %} <div class="topmenu-button {% if loop.first %}first{% endif %} {% if loop.last %}last{% endif %}"> <a href="{{ elem.url }}">{{ elem.name }}</a> </div> {% endfor %}
编辑 :这样你会得到一些额外的空间在class
属性(这是完全好的btw)。 编辑2 :这将不会处理1元素的数组(首先=最后)
如果是pipe理一个标签的类属,三元条件会更好。
<span class="topmenu-button {{ (loop.first) ? 'first' : '' }}">{{ item.text }}</span>