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

Javascript 如何在另一个td中显示两个数字的百分比和最终结果,javascript,jquery,Javascript,Jquery,我有一个由tr和tds组成的表格,我显示了在第三个td中售出机票的百分比。这段代码的问题在于结果重复错误。我的意思是20倍的结果是额外的。我认为这是因为我的html格式。但是我不能改变我的html代码的格式。我该怎么办?以下是我的片段: $('table tbody tr')。每个(函数(){ var$this=这个, td2Value=$('td:nth child(7)'$this).text().trim().split(/\D+/); $('span.result',$this.htm

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

$('table tbody tr')。每个(函数(){
var$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(函数(v,i){
返回数学舍入((td2Value[i]*100/v)| | 0)+'%';
})。加入(“
”); })

标题
标题
标题
标题
标题
可用的
出售
后果
-
-
-
-
-
10
0
5
0



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

$('table tbody tr')。每个(函数(){
var$this=这个,
td2Value=$('td:nth child(7)'$this).text().trim().split(/\D+/);
$('span.result',$this).each(函数(索引,元素){
设v=$('td:nth child(6)'),$this.text().trim().split(/\D+/);
$(element.html(Math.round((td2Value[index]*100/v[index])| | 0)+'%');
});
})

标题
标题
标题
标题
标题
可用的
出售
后果
-
-
-
-
-
10
0
5
0


$('table tbody tr')。每个(函数(){
var$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(函数(v,i){
返回数学舍入((td2Value[i]*100/v)| | 0)+'%';
})。加入(“
”); })

标题
标题
标题
标题
标题
可用的
出售
后果
-
-
-
-
-
10
0
5
0


如果你对HTML一成不变,那么我们有一个解决方案。 稍微更改JavaScript代码:

$('td:nth-child(6)', $this).text().trim().split(/\D+/).forEach(function(v, i) {
    $('span.result', $this)[i].innerHTML = Math.round((td2Value[i] * 100 / v) || 0) + '%';
}); 

只需删除一个

就可以了,因为当您使用
map
时,您已经在写这两个值了…@balexandre我有两个span名为result,但我的结果显示为4。如果我删除我的tds中的br,效果很好,但我无法删除它们如果你无法删除,只需输出到其中一个。。。将此
$('span.result',$this).html(…
更改为
$('span.result:first',$this).html(…
)-因此我们添加了
:first
,这样您只能将文本写入第一个,而不能同时写入两个…-或者您可以简单地删除其中一个
$('span.result:last',$this)。删除()
(用于删除最后一个…)@balexandre我必须在每个span中分别显示每个输出。这不太好。你在你的问题中简单地说明了这一点?这样可以节省很多精力!!!我无法更改html格式。span应该是2。我必须在每个span中分别显示每个输出。有什么方法可以这样做吗?我相信你想要的是这样的东西?其中f或者每个跨距你想要在第6和第7个
td
中对应的行?是的,类似这样的事情。在这个代码中我看不到结果?实际上我也想保留跨距,并将第6和第7个跨距的每个结果放在上面。我已经更新了上面的代码,你可以运行它,看看这是否是你正在寻找的for@aynaz-我不知道你为什么看着我对于此代码为ng。let v=$('td:nth child(6)')、$this.text().trim().split(/\D+/);将对每个跨度执行一次。但是在我的代码中,它将只执行一次。那么我应该在哪里定义td:nth child(7)?它将与您定义的相同。您只需替换此代码:$('span.result',$this.html($('td:nth child(6),$this.text().trim()).split(/\D+/).map(函数(v,i){return Math.round((td2Value[i]*100/v)| | | 0)+'%'}).join(
');