Avatar billede js26 Nybegynder
22. februar 2002 - 15:59 Der er 5 kommentarer og
1 løsning

Liste med skiftevis lys og mørk baggrund

Hvordan laver jeg en liste (html) med xslt hvor linier er med skiftevis lys og mørk baggrund.
Avatar billede Slettet bruger
22. februar 2002 - 16:59 #1
Hvis du har flg. XML:
<linjer>
  <linje />
  <linje />
  <linje />
  <linje />
</linjer>

Kan du f.eks. bruge sådan en template:

<xsl:template match="linjer">
        <xsl:for-each select="linje">
            <xsl:choose>
                <xsl:when test="position() mod 2 = 0">
                    <div style="background:#ccc;color:#000;">Light</div>
                </xsl:when>
                <xsl:otherwise>
                    <div style="background:#666;color:#000;">Dark</div>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
    </xsl:template>

/CS
Avatar billede js26 Nybegynder
23. februar 2002 - 22:03 #2
Ja, ok.
Men hvad nu hvis enkelte <linje> elementer ikke skal udskrives.
Så kan jeg ikke bruge position() til at styre det med.
Avatar billede Slettet bruger
23. februar 2002 - 22:28 #3
OK - så skal du nok til at bruge scripting inde i stylesheet'et. Har du prøvet det?

Ideen er at lave en funktion som returnerer "odd" eller "even", som du lægger i en class-attribut, typisk:
<xsl:template match="produkt">
<tr> 
  <td class="{funcs:oddEven('newrow')}"><xsl:value-of select="navn" /></td>
  <td class="{funcs:oddEven('')}"><xsl:value-of select="pris" /></td>
</tr>
</xsl:template>

/CS
Avatar billede js26 Nybegynder
24. februar 2002 - 13:15 #4
Desværre nej, jeg forstår ikke helt det du gør.
Hvad gør funcs:oddEven ???
Avatar billede Slettet bruger
29. august 2002 - 10:02 #5
I MSXML kan det gøres ved at lægge disse NameSpace dekl. ind som attributter i <xsl:stylesheet>, f.eks.:

<xsl:stylesheet    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:msxsl="urn:schemas-microsoft-com:xslt"
    xmlns:funcs="#bogus-not-used"
    exclude-result-prefixes="msxsl funcs"
>

- og den her ind i stylesheet'et (f.eks. i bunden)
<msxsl:script implements-prefix="funcs"><![CDATA[
function oddEven(NewRow) {
  if (typeof(counter) == 'undefined')
    counter = 0;
  else
    counter += (NewRow == 'newrow' ? 1 : 0);
  return (counter % 2 == 0 ? "odd" : "even");
}
]]></msxsl:script>

Funktionen returnerer 'odd' eller 'even'. Hvis funktionen kaldes uden parameter, returnerer den det samme som sidst - ellers skifter den.

/CS
Avatar billede Slettet bruger
29. august 2002 - 10:02 #6
Hmm - skulle jo nok haveværet et svar :-)

/CS
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester