6 Stimmen

Abwechselnde Zeilenfarben in einer tr-Klasse mit XSL

Ich habe ein XSL-Dokument, in das eine variable Anzahl von Artikeln eingefügt ist. Ich möchte, dass die Hintergrundfarben der Artikel abwechselnd "ungerade" und "gerade" sind.

<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>

Ich habe mir diesen Beitrag angesehen: HTML-Tabelle mit abwechselnden Zeilenfarben über XSL

aber mein Fall ist anders, glaube ich. Ich muss nur die tr-Klasse bei jeder Iteration ändern. Sorry für die seltsame Formatierung, ich scheine Probleme mit dem Einfügen von Code in Chrome hier.

8voto

Dimitre Novatchev Punkte 234995

Verwendung:

<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};">

2voto

Flack Punkte 5802
<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>

0voto

Jim Garrison Punkte 83143

Utilisez position() und dem Rest bei der Division durch zwei.

0voto

Alex Nikolaenkov Punkte 2477

Ihr Fall ist sehr ähnlich. Sie sollten einen Klassennamen definieren, der auf der Position basiert. @Jim Garrison gibt Ihnen eine gute Aufforderung, aber ich denke, das Beispiel ist notwendig, weil es Beispiele gibt mit position() in den von Ihnen angeführten Beispielen, und die Frage wird gestellt.

<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;">
....

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X