Чередование цветов строк в классе tr с использованием XSL - PullRequest
6 голосов
/ 10 февраля 2011

У меня есть документ XSL, в который вставлено допустимое количество статей.Мне нужно, чтобы цвета фона статей чередовались: «Нечетный» и «Четный»

<xsl:for-each select="newsletter/section/article">
    <tr class="odd" style="background-color: #efefef;">
        <td valign="top">
            <xsl:element name="a">
                <xsl:attribute name="href">
                    <xsl:value-of select="link" />
                </xsl:attribute>
                <img align="left" valign="top" width="110" 
                            style="padding: 0 4px 4px 0; border:0;">
                    <xsl:attribute name="alt">
                        <xsl:value-of select="title" />
                    </xsl:attribute>
                    <xsl:attribute name="src">
                        <xsl:value-of select="img" />
                    </xsl:attribute>
                </img>
            </xsl:element>
        </td>
        <td valign="top" style="padding: 4px 4px 18px 0;">
            <strong>
                <xsl:element name="a">
                    <xsl:attribute name="href">
                        <xsl:value-of select="link" />
                    </xsl:attribute>
                    <xsl:value-of select="title"/>
                </xsl:element>
            </strong>
            <br />
            <xsl:value-of select="excerpt"/>
        </td>
    </tr>
</xsl:for-each>

Я посмотрел этот пост: Таблица HTML с чередующимися цветами строк через XSL

но мой случай другой, я верю.Мне просто нужно изменить класс tr на каждой итерации.Извините за странное форматирование, у меня, похоже, возникают проблемы при вставке кода в Chrome здесь.

Ответы [ 4 ]

8 голосов
/ 10 февраля 2011

Использование:

<xsl:for-each select="newsletter/section/article">
  <xsl:variable name="vColor">
    <xsl:choose>
      <xsl:when test="position() mod 2 = 1">
        <xsl:text>#efefef</xsl:text>
      </xsl:when>
      <xsl:otherwise>#ababab</xsl:otherwise>
        </xsl:choose>
      </xsl:variable>


  <tr class="odd" style="background-color: {$vColor};">
2 голосов
/ 10 февраля 2011
<xsl:for-each select="date">
    <tr>
        <xsl:if test="position() mod 2 = 1">
            <xsl:attribute name="class">odd</xsl:attribute>
            <xsl:attribute name="style">background-color: #efefef;"
            </xsl:attribute>
        </xsl:if>
        <td valign="top">
            <a href="{link}">
                <img align="left" valign="top" width="110"
                            style="padding: 0 4px 4px 0; border:0;"
                            alt="{title}"
                            src="{img}"/>
            </a>
        </td>
        <td valign="top" style="padding: 4px 4px 18px 0;">
            <strong>
                <a href="{link}">
                    <xsl:value-of select="title"/>
                </a>
            </strong>
            <br />
            <xsl:value-of select="excerpt"/>
        </td>
    </tr>
</xsl:for-each>
0 голосов
/ 10 февраля 2011

Ваш случай очень похож. Что вы должны сделать, это определить имя класса на основе позиции. @ Джим Гаррисон дает вам хороший совет, но я думаю, что этот пример необходим, потому что в примерах, на которые вы ссылаетесь, есть примеры с position() и задается вопрос.

<xsl:for-each select="newsletter/section/article">
  <!-- create index-based variable -->
  <xsl:variable name="classname">
    <xsl:choose>
      <xsl:when test="position() mod 2 = 0">
        <xsl:text>even</xsl:text>
      </xsl:when>
      <xsl:otherwise>
         <xsl:text>odd</xsl:text>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:variable>
  <!-- insert contents of your variable -->
  <tr class="{$classname}" style="background-color: #efefef;">
....
0 голосов
/ 10 февраля 2011

Используйте position() и остаток при делении на два.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...