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

时间:2017-09-20 05:31:15

标签: javascript jquery

我有一张由tr和tds组成的表格,我在第三个td显示售票的百分比。这段代码的问题是结果重复错误。我的意思是2倍的结果是额外的。我认为这是因为我的html格式。但我不能改变我的HTML代码的格式。我该怎么办 ?这是我的片段:

$('table tbody tr').each(function() {
  var $this = this,
    td2Value = $('td:nth-child(7)', $this).text().trim().split(/\D+/);
    
  $('span.result', $this).html(
    $('td:nth-child(6)', $this).text().trim().split(/\D+/).map(function(v, i) {
      return Math.round((td2Value[i] * 100 / v) || 0)+ '%';
    }).join('<br>'));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<table border="1">
             <thead>
                <tr>
                  <th> title </th>
                  <th>  title </th>
                  <th> title </th>
                  <th>  title </th>
                  <th>title </th>
                  <th> avalable</th>
                  <th> sold</th>
                  <th>  result </th>
                </tr>
            </thead>
<tbody>
<tr>
<td>
-</td>
<td>
-</td>
<td>
-
</td>
<td>  
-
</td>
<td>
 -
</td>
<td>
10<br/>  
0<br/> 
</td>
<td>
5<br/>
0<br/>
</td>
<td>
<span class="result"></span><br/>
<span class="result"></span><br/>
</td>
</tr>
</tbody>
</table>

3 个答案:

答案 0 :(得分:1)

您可以删除带有class =“result”的第二个<span />标记,但如果您不想更改html,则可以使用jQuery的.first()方法仅选择第一个匹配范围。概括使得每个跨度的索引指示其他tds中的数字索引:

$('table tbody tr').each(function() {
  var $this = this,
    td2Value = $('td:nth-child(7)', $this).text().trim().split(/\D+/);

  $('span.result', $this).each(function (index, element) {
    let v = $('td:nth-child(6)', $this).text().trim().split(/\D+/);
    $(element).html(Math.round((td2Value[index] * 100 / v[index]) || 0) + '%');
  });
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<table border="1">
             <thead>
                <tr>
                  <th> title </th>
                  <th>  title </th>
                  <th> title </th>
                  <th>  title </th>
                  <th>title </th>
                  <th> avalable</th>
                  <th> sold</th>
                  <th>  result </th>
                </tr>
            </thead>
<tbody>
<tr>
<td>
-</td>
<td>
-</td>
<td>
-
</td>
<td>  
-
</td>
<td>
 -
</td>
<td>
10<br/>  
0<br/> 
</td>
<td>
5<br/>
0<br/>
</td>
<td>
<span class="result"></span><br/>
<span class="result"></span><br/>
</td>
</tr>
</tbody>
</table>

答案 1 :(得分:0)

$('table tbody tr').each(function() {
  var $this = this,
    td2Value = $('td:nth-child(7)', $this).text().trim().split(/\D+/);
    
  $('span.result', $this).html(
    $('td:nth-child(6)', $this).text().trim().split(/\D+/).map(function(v, i) {
      return Math.round((td2Value[i] * 100 / v) || 0)+ '%';
    }).join('<br>'));
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.10.0/jquery.min.js"></script>
<table border="1">
             <thead>
                <tr>
                  <th> title </th>
                  <th>  title </th>
                  <th> title </th>
                  <th>  title </th>
                  <th>title </th>
                  <th> avalable</th>
                  <th> sold</th>
                  <th>  result </th>
                </tr>
            </thead>
<tbody>
<tr>
<td>
-</td>
<td>
-</td>
<td>
-
</td>
<td>  
-
</td>
<td>
 -
</td>
<td>
10<br/>  
0<br/> 
</td>
<td>
5<br/>
0<br/>
</td>
<td>
<span class="result"></span><br/>
</td>
</tr>
</tbody>
</table>

答案 2 :(得分:0)

如果您的HTML很严格,那么我们就有了解决方案。 稍微更改您的JavaScript代码:

.thenApply(e -> { foo(e); return e; }