在Lift应用程序中,我想添加一个特殊标记,它需要下一个表的<tbody>
部分,并将odd
和even
类(例如)添加到每个<tr>
标签。当然是交替。虽然我找到了一种为所有<tr>
标签添加另一个属性的方法,但仍存在一些问题(请参阅下面的代码)。scala:将属性(奇数行和偶数行)添加到xml表
首先,它不起作用。 cycle.next
过于频繁,所以最后,所有内容都是odd
行。其他问题是代码不排除内部表(因此嵌套的<tr>
也会进行转换),并且它也会影响表的<thead>
部分。
想法使此代码工作? (当然,如果已经有一个升力型的解决方案 - 无需jQuery的 - 对于这一点,我会感激地接受它。)
// Helper class for looping
class Loop(val strs: String*) {
val stream_iter = Stream.continually(strs.toStream).flatten.iterator
def next = stream_iter.next
}
val cycle = new Loop("even", "odd")
val rr = new RewriteRule {
override def transform(n: Node): Seq[Node] = n match {
// match any Elem
case elem : Elem => elem match {
// If it’s a <tr> do some further processing
case Elem(_, "tr", att @ _, _, _*) =>
elem % Attribute(None, "class", Text(
// add the attribute and concatenate with others
List(att.get("class").getOrElse("").toString, cycle.next).reduceLeft(_+" "+_).trim
), Null) toSeq
case other => other
}
case other => other
}
}
val rt = new RuleTransformer(rr)
val code = <table>
<thead><tr><td>Don’t</td><td>transform this</td></tr></thead>
<tbody>
<tr class="otherclass">
<td>r1c1</td><td>r1c2</td>
</tr>
<tr>
<td>r2c1</td><td>r2c2</td>
</tr>
<tr>
<td>r3c1</td><td>r3c2</td>
</tr>
</tbody>
</table>
println(rt(code))
正如我已经说过了,我不想使用jQuery这一点。另外,我不想在服务器端创建索引,因为我认为奇数/偶数行是模板设计者需要关注的,而不是程序员。 (尽管如此,程序员可能会创建模板标签。) – Debilski 2010-06-07 15:42:10