javascript - 如果 td 值超过 10,000,则更改 td 颜色

标签 javascript jquery html html-table css-selectors

我正在做 CS50 金融练习,我试图显示某人是否从他的股票中获利。最初,你得到 10000 现金。我试图在投资组合的总值(value)(HTML 代码结尾)超过 10000 美元时显示。我已经写了下面的代码,但是它还不能工作,希望你能帮助我。

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.js"></script>
<script type="text/javascript">
  $(document).ready(function() {
    $('#table_id td.color').each(function() {
      if ($(this).val() > 10000) {
        $(this).css('color', '#2e944b');
      }
    });
  });
</script>
<table class="table" id="table_id">
  <tr>
    <th></th>
    <th>User ID</th>
    <th>Stock</th>
    <th>Company Name</th>
    <th>Amount</th>
    <th>Current Price</th>
    <th>Holdings</th>
  </tr>
  {% for port in portfolio %}
  <tr>
    <td></td>
    <td>{{port.id}}</td>
    <td>{{port.stocks}}</td>
    <td>{{lookup(port.stocks)['name']}}</td>
    <td>{{port.amount}}</td>
    <td>{{usd(lookup(port.stocks)['price'])}}</td>
    <td>{{usd(lookup(port.stocks)['price']*port.amount)}}</td>
  </tr>
  {% endfor %}
  <tr>
    <td><b>Cash</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td>{{ usd(cash) }}</td>
  </tr>
  <tr>
    <td><b>Total</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td class="color">{{ usd(grand_tot) }}</td>
  </tr>
</table>

Output value screenshot

最佳答案

首先请注意,jQuery 1.4.4 已经非常过时了。您应该至少使用 1.12.1,最好是 3.3.1(在提出这个问题时)。

您的逻辑的主要问题是您在没有值的 td 元素上使用 val()。您需要改为检查 text()。鉴于文本的格式,您还需要在进行比较之前从中删除 $, 字符。

另请注意,更好的做法是将类应用于元素以设置它们的样式,以保持关注点分离。因此,您可以使用 addClass(),并且可以为该方法调用提供一个函数,以根据单元格中的文本确定是否应添加该类。

最后请注意,问题指出“超过 10,000”,但您的代码正在检查超过 1,000。无论哪种方式,这都是逻辑上的简单更改。试试这个:

$(document).ready(function() {
  $('#table_id td.color').addClass(function() {
    var total = $(this).text().replace(/[$,]/g, '');
    return parseInt(total, 10) > 10000 ? 'foo' : null;
  });
});
.foo {
  color: #2E944B;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<table class="table" id="table_id">
  <tr>
    <th></th>
    <th>User ID</th>
    <th>Stock</th>
    <th>Company Name</th>
    <th>Amount</th>
    <th>Current Price</th>
    <th>Holdings</th>
  </tr>
  <tr>
    <td><b>Total</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td class="color">$101</td>
  </tr>
  <tr>
    <td><b>Total</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td class="color">$1,001</td>
  </tr>
  <tr>
    <td><b>Total</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td class="color">$10,001</td>
  </tr>
  <tr>
    <td><b>Total</b></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td></td>
    <td class="color">$100,001</td>
  </tr>
</table>

关于javascript - 如果 td 值超过 10,000,则更改 td 颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923036/

相关文章:

javascript - 如何从 React 中的 Promise 中获取响应数据?

javascript - 在java中的 Controller 端处理动态生成的表单元素

javascript - 高效追加到现有 DOM 元素数组

html - 不可移植的 CSS : button background images do not display in some mobile browsers

javascript - 如何解析此 HTML javascript 页面中的日期?

javascript - 在容器 div 中对齐放置的 div

javascript - Chrome ✗ vs Firefox 中 ES6/Unicode 正则表达式中的逻辑 OR 序列 ✓

javascript - jQuery UI 颜色选择器问题

javascript - 如何在服务器端调用后在 div 加载上调用 javascript 函数?

css - 在 bootstrap 3 的小屏幕上更改类样式?