1行おきに色を変えたい

「まったく何も分からない・・・」そんなユーザーさんの為のフォーラムです。どんなご質問でもお気軽にどうぞ。
返信
piglet
記事: 2
登録日時: 2007年12月13日(木) 13:46

1行おきに色を変えたい

投稿記事 by piglet » 2007年12月13日(木) 13:56

いつもお世話になっております。
リストの色を1行ずつ変えようと、以下のように記述しました。

コード: 全て選択

<xsl:for-each select="entry">
 <xsl:if test="not(name_us='')">
 <xsl:choose>
 <xsl:when test="(position() mod 2) = 0">
 <tr class="even">
  <xsl:call-template name="linetable" />
 </tr>
 </xsl:when>
 <xsl:otherwise>
 <tr class="odd">
  <xsl:call-template name="linetable" />
 </tr>
 </xsl:otherwise>
 </xsl:choose>
 </xsl:if>
</xsl:for-each>
name_us項目による条件判断がなければ、これで1行おきにclassがevenおよびoddとなるのですが、name_us項目がある場合のみ抜き出しているので、position()を
使っているせいか、うまく1行おきになってくれません。

やりたいことは全データからname_us項目が設定されている物のみの一覧を作成し、それを1行おきに色分けしたいのですが。

以上よろしくお願い致します。

webmaster
Site Admin
記事: 1451
登録日時: 2004年12月10日(金) 10:09

Re: 1行おきに色を変えたい

投稿記事 by webmaster » 2007年12月13日(木) 15:42

 pigletさん、ご質問ありがとうございます。いつもお世話になっております。

 position()が返す値は、for-eachのselectで指定された集合についての現在位置
の為、このようになっているのだと思われます。

 select属性の内容を"entry"ではなく、"entry[not(name_us='')]"にしてみて
下さい。その場合、<xsl:if test="not(name_us='')">の部分は不要となります。

 この方法はマニュアルには記載されておらず、ご面倒をおかけしまして
申し訳ありませんでした。

 一度お試し頂き、もしうまくいかなかった場合は再度ご連絡頂ければ幸いです。

piglet
記事: 2
登録日時: 2007年12月13日(木) 13:46

出来ました!

投稿記事 by piglet » 2007年12月13日(木) 15:56

早速のご返信ありがとうございました。

ご教示頂きました方法にて解決致しました。 :D

全てのエントリーに対してifで処理するのではなく、条件に合った
エントリーのみを処理すると言うことですね!

どうもありがとうございました。

返信