33

我正在使用 Groovy 方便的 MarkupBuilder 从各种源数据构建 HTML 页面。

我正在努力做好的一件事是构建一个 HTML 表格并将不同的样式类应用于第一行和最后一行。这可能最好用一个例子来说明......

table() {
  thead() {
    tr(){
      th('class':'l name', 'name')
      th('class':'type', 'type')
      th('description')
    }
  }
  tbody() {
    // Add a row to the table for each item in myList
    myList.each {
      tr('class' : '????????') {
        td('class':'l name', it.name)
        td('class':'type', it.type)
        td(it.description)
      }
    }
  }   
}

在该<tbody>部分中,我想将<tr>元素的类设置为不同的,具体取决于当前项目myList是第一项还是最后一项。

有没有一种很好的 Groovy-ified 方式来做到这一点,而无需使用类似的东西手动检查项目索引与列表大小的对比eachWithIndex{}

4

3 回答 3

56

你可以使用

if(it == myList.first()) {
   // First element
}

if(it == myList.last()) {
   // Last element
}
于 2010-10-25T08:07:30.457 回答
18

sbglasius 提供的答案可能会导致不正确的结果,例如当列表包含冗余元素时,列表中的元素可能等于最后一个元素。

我不确定 sbglasius 是否可以使用is()==但正确的答案可能是:

myList.eachWithIndex{ elt, i ->
  if(i == 0) {
   // First element
  }

  if(i ==  myList.size()-1) {
   // Last element
  }
}
于 2015-09-20T02:20:18.820 回答
2

if (it.after.value != null) { ...... }

适用于地图

于 2013-07-02T11:29:01.643 回答