将两个数字百分比并在另一个td中显示最终结果

时间:2017-09-19 10:30:23

标签: javascript jquery

我有一张由tr和tds组成的表格,我在第三个td显示售票的百分比。这个代码的问题是它在每个百分比后生成一个零,我认为它是用于br标签。 我该怎么办 ? 这是我的片段:



$('table tbody tr').each(function() {
  var $this = this,
    td2Value = $('td:nth-child(2)', $this) 
    .html()
    .trim() 
    .split(/\D+/); 
  $('span.result', $this).html(
    $('td:nth-child(1)', $this) 
    .html() 
    .trim() 
    .split(/\D+/) 
    .map(function(v, i) {
      return Math.round((td2Value[i] * 100 / v) || 0);
    })
    .join('<br>'));
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
  <thead>
    <tr>
      <th>Avalable</th>
      <!--available-->
      <th>Sold</th>
      <!--used-->
      <th>Result</th>
    </tr>
  </thead>
  <tr>
    <td>30 <br/></td>
    <!--available-->
    <td>4 <br/></td>
    <!--used-->
    <td><span class="result"></span></td>
  </tr>

  <tr>
    <td>20 <br/> 20 <br/></td>
    <!--available-->
    <td>6 <br/> 5 <br/></td>
    <!--used-->
    <td><span class="result"></span></td>
  </tr>
</table>
&#13;
&#13;
&#13;

2 个答案:

答案 0 :(得分:3)

问题是因为您正在使用html(),因此会在输出中添加额外的行,然后在计算中对其进行评估。请改用text()

&#13;
&#13;
$('table tbody tr').each(function() {
  var $this = $(this),
    td1Value = $this.find('td:nth-child(1)').text().trim().split(/\D+/),
    td2Value = $this.find('td:nth-child(2)').text().trim().split(/\D+/);

  $this.find('span.result').html(td1Value.map(function(v, i) {
    return Math.round((td2Value[i] * 100 / v) || 0) + '%';
  }).join('<br>'));
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table border="1">
  <thead>
    <tr>
      <th>Avalable</th>
      <th>Sold</th>
      <th>Result</th>
    </tr>
  </thead>
  <tr>
    <td>30 <br/></td>
    <td>4 <br/></td>
    <td><span class="result"></span></td>
  </tr>
  <tr>
    <td>20 <br/> 20 <br/></td>
    <td>6 <br/> 5 <br/></td>
    <td><span class="result"></span></td>
  </tr>
</table>
&#13;
&#13;
&#13;

请注意,我也整理了你的逻辑。

答案 1 :(得分:0)

你正在循环内部的内容,前2个你有数字但是对于第3个td,如果你要调试你可以看到循环正在做一个额外的迭代。

在return语句之前将地址函数放在下面的行:

console.log('&gt;&gt;&gt;',td2Value [i],v,i);