我有一张由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>
答案 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; }