颜色表行基于列值

kdu*_*ubs 2 javascript

我有一个html表,我想根据该行第一列中的值为行着色。如果值为“ CONFIRMED”,我想将行涂成绿色,如果值为“ UNCONFIRMED”,我想将行涂成红色。

我正在使用的JS是:

$(function(){
    $("tr").each(function(){
      var col_val = $(this).find("td:eq(1)").text();
      if (col_val == "CONFIRMED"){
        $(this).addClass('selected');  //the selected class colors the row green//
      } else {
        $(this).addClass('bad');
      }
    });
});
Run Code Online (Sandbox Code Playgroud)

CSS看起来像这样:

.selected {
background-color: green;
  color: #FFF;
}

.bad {
  background-color: red;
  color: #FFF;
}
Run Code Online (Sandbox Code Playgroud)

html表是从Django视图中的pandas数据帧生成的,并像这样传递:

<div class="table-responsive" style="margin-left: 15%; margin-right: 15%; overflow:auto;">
  {{ datatable | safe }}
</div>
Run Code Online (Sandbox Code Playgroud)

问题是它把我所有的行都染成红色。谁能告诉我我在做什么错?

Rok*_*jan 6

由于您使用==="CONFIRMED"确保它真的:大写,并且没有前导或结尾空格" CONFIRMED"或者"CONFIRMED "在HTML。

您显示的代码将使TD包含“ CONFIRMED”内容.selected的整行着色:eq(1)

$(function(){
  $("tr").each(function(){
    var col_val = $(this).find("td:eq(1)").text();
    if (col_val == "CONFIRMED"){
      $(this).addClass('selected');  //the selected class colors the row green//
    } else {
      $(this).addClass('bad');
    }
  });
});
Run Code Online (Sandbox Code Playgroud)
.selected{
  background-color:green;
}
.bad{
  background-color:red;
}
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <tr>
    <td>1</td><td>CONFIRMED</td>
  </tr>
  <tr>
    <td>2</td><td>UNCONFIRMED</td>
  </tr>
</table>
Run Code Online (Sandbox Code Playgroud)

没什么不好的。

如果那不是您在屏幕上看到的:eq()基于索引的注释,而元素索引从此开始,0那么:eq(0)您可能想要的是什么?

另一个可能的事情是,您没有设置与内容字符串相同的内容,"CONFIRMED"但是前后可能有一些空格-因此请确保使用来修剪它们$.trim()

if( $.trim(col_val) === "CONFIRMED" )
Run Code Online (Sandbox Code Playgroud)

如果您还想使代码在大写或大写方面更加灵活,则可以执行以下操作:

if( $.trim(col_val.toLowerCase() ) === "confirmed" )
// Will work on "CONFIRMED", "Confirmed", "conFIRMed" etc
Run Code Online (Sandbox Code Playgroud)


小智 5

<style>
    tr[data-stat="confirmed"]{
        background-color: green;
        color: #fff;
    }
    tr[data-stat="unconfirmed"]{
        background-color: red;
        color: #fff;
    }
</style>

<table>
    <tr data-stat="confirmed">
        <td>1</td>
        <td>Confirmed</td>
        <td>bla.. bla.. bla..</td>
    </tr>
    <tr data-stat="unconfirmed">
        <td>2</td>
        <td>Not Confirmed</td>
        <td>bla.. bla.. bla..</td>
    </tr>
</table>
Run Code Online (Sandbox Code Playgroud)