jQuery - 在表行中查找最小值并设置样式

时间:2017-08-31 13:48:18

标签: jquery html css html-table

首先 - 我是jQuery / JS的新手

我有一个显示体育赛事结果的网站。每年有6场比赛,但只有4项最佳成绩被用于排名。

我在网站上有一个表格,该表格通过google电子表格(通过sheetrock)的jQuery填充。

表格如下:

$('tr').each(function() {
  var vals = $('td:nth-child(n+3):nth-last-child(n+2)', this).map(function() {
    return parseInt($(this).text()) ? parseInt($(this).text()) : null;
  }).get();
  var min = Math.min.apply(Math, vals);

  $('td:nth-child(n+3):nth-last-child(n+2)', this).filter(function() {
    return parseInt($(this).text()) === min;
  }).css('text-decoration', 'line-through');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
  <thead>
    <tr>
      <th>Rang</th>
      <th>Team</th>
      <th>KC</th>
      <th>ZB</th>
      <th>BVO</th>
      <th>BW</th>
      <th>MC</th>
      <th>BB</th>
      <th>TOTAL</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Eckl/Lak</td>
      <td>100</td>
      <td>100</td>
      <td>100</td>
      <td></td>
      <td>100</td>
      <td></td>
      <td>400</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Pointner/Wimmer J.</td>
      <td>70</td>
      <td></td>
      <td>50</td>
      <td>50</td>
      <td>70</td>
      <td>80</td>
      <td>220</td>
    </tr>
    <tr>
      <td>3</td>
      <td>Grießler/Svetanic</td>
      <td>56</td>
      <td></td>
      <td>62</td>
      <td>40</td>
      <td></td>
      <td>40</td>
      <td>198</td>
    </tr>
  </tbody>
</table>

我现在要做的就是让jQuery检查表的每一行是否有超过4个结果。如果有超过4个,我想通过最小值。

我用它来识别超过4个结果的行:

$('table tr').filter(function() {
      return $(this).children('td:empty').length < 2;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

要设置单元格样式,我使用它:

$('tr').each(function() {
  var vals = $('td:nth-child(n+3):nth-last-child(n+2)', this).map(function() {
    return parseInt($(this).text()) ? parseInt($(this).text()) : null;
  }).get();
  var min = Math.min.apply(Math, vals);

  $('td:nth-child(n+3):nth-last-child(n+2)', this).filter(function() {
    return parseInt($(this).text()) === min;
  }).css('text-decoration', 'line-through');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

但有一些事情显然无效。

目前,它标识了每一行的所有最小值。因此,如果有多个最小值,它还会为每个最小值设置样式,而不仅仅是其中一个。

此外,我不知道如何将其纳入if语句。

我真的希望有人可以帮助我。

1 个答案:

答案 0 :(得分:0)

在整个表格中找到最小值

var vals = $('tr td').map(function () {
    return isNaN(parseInt($(this).text(), 10)) ? parseInt($(this).text(), 10) :  null;
}).get();

// then find their minimum
var min = Math.min.apply(Math, vals);

// tag any cell matching the min value
$('tr td').filter(function () {
    return parseInt($(this).text(), 10) === min;
}).addClass('alert alert-danger');

在每行中找到最小值

$('tr').each(function(){
    var vals = $('td,th',this).map(function () {
        return parseInt($(this).text(), 10) ? parseInt($(this).text(), 10) :  null;
    }).get();
    // then find their minimum
    var min = Math.min.apply(Math, vals);

    // tag any cell matching the min value
    $('td,th', this).filter(function () {
        return parseInt($(this).text(), 10) === min;
    }).addClass('alert alert-danger');
});

你应该看看 - https://stackoverflow.com/a/22470186/1665370