HTML - 根据内容更改表格单元格颜色

时间:2018-04-17 13:51:15

标签: html xml css3 xslt html-table

我必须说我是这一切的绝对新手。 我正在写一个小的xslt演示文件,带有一个表,我想改变单元格或行的背景颜色(要么会改变,但我更愿意只改变单元格背景),具体取决于内容。 / p>

实施例: RATING =“GOOD”“MEDIUM”“BAD”;根据它的值,我希望背景为绿色,黄色或红色。

我目前的表格代码:

<table width="1000" border="0" cellspacing="0" cellpadding="0" class="table-fill">
    <thead>
        <tr>
            <th scope="col">NAME</th>
            <th scope="col">VALUE</th>
            <th scope="col">RATING</th>
            <th scope="col">DESCRIPTION</th>
        </tr>
    </thead>
    <tbody>
        <xsl:for-each select="test/criteria">
            <tr>
                <td><xsl:value-of select="@nom" /></td>
                <td><xsl:value-of select="value" /></td>
                <td><xsl:value-of select="rating" /></td>
                <td><xsl:value-of select="descr" /></td>
            </tr>
        </xsl:for-each>
    </tbody>
</table>

提前谢谢

- EDIT-- @Yaakov Ainspan回答了我的问题,并由@Ruud解决,他给了我一些我缺乏的代码。

它不是“Is there a CSS selector for elements containing certain text?”的副本,因为我不需要从包含多个元素的字符串中隔离元素,只是为了创建与单元格内容同名的类(这是一个单词)

1 个答案:

答案 0 :(得分:1)

如果它只是这三个预定义值,您可以使用相同的名称向样式表添加类:

.GOOD {
    background-color: green;
}
.MEDIUM {
    background-color: yellow;
}
.BAD {
    background-color: red;
}

...并将class属性添加到行:

    <xsl:for-each select="test/criteria">
        <tr>
            <xsl:attribute name="class">
                <xsl:value-of select="rating" />
            </xsl:attribute>
            <td><xsl:value-of select="@nom" /></td>
            <td><xsl:value-of select="value" /></td>
            <td><xsl:value-of select="rating" /></td>
            <td><xsl:value-of select="descr" /></td>
        </tr>
    </xsl:for-each>

...或单元格:

    <xsl:for-each select="test/criteria">
        <tr>
            <td><xsl:value-of select="@nom" /></td>
            <td><xsl:value-of select="value" /></td>
            <td>
                <xsl:attribute name="class">
                    <xsl:value-of select="rating" />
                </xsl:attribute>
                <xsl:value-of select="rating" />
            </td>
            <td><xsl:value-of select="descr" /></td>
        </tr>
    </xsl:for-each>

编辑:为了更好的可读性,您还可以这样添加课程:

    <xsl:for-each select="test/criteria">
        <tr>
            <td><xsl:value-of select="@nom" /></td>
            <td><xsl:value-of select="value" /></td>
            <td class="{rating}"><xsl:value-of select="rating" /></td>
            <td><xsl:value-of select="descr" /></td>
        </tr>
    </xsl:for-each>