jQuery:使用不同的div值计算百分比?

jQuery:使用不同的div值计算百分比?,jquery,Jquery,我有一个php网页,它获取一个有序列表,其中包含排名、名称和金额。我无法改变这份清单对我的影响。然而,我想对jQuery做的是将排名更改为合适的百分比((d-value-div/sum all values)*100) 如果你运行下面的截图,你可以看到我能够计算出所有值的总和。您还可以看到,我可以将排名更改为正确的百分比,但只能更改为第一行的百分比。我想看到的是其他职级的正确百分比 当前: 55.12%名称1$70 55.12%姓名2$35 55.12%3$20 55.12%名称4$2 目标:

我有一个php网页,它获取一个有序列表,其中包含排名、名称和金额。我无法改变这份清单对我的影响。然而,我想对jQuery做的是将排名更改为合适的百分比((d-value-div/sum all values)*100)

如果你运行下面的截图,你可以看到我能够计算出所有值的总和。您还可以看到,我可以将排名更改为正确的百分比,但只能更改为第一行的百分比。我想看到的是其他职级的正确百分比

当前:
55.12%名称1$70
55.12%姓名2$35
55.12%3$20
55.12%名称4$2

目标:
55.12%名称1$70
27.56%姓名2$35
15.75%名称3$20
1.57%名称4$2

如何做到这一点

var总和=0.0;
$(文档).ready(函数(){
$('.row#d-value')。每个(函数(){
sum+=parseFloat($(this).text().replace('$','');
});
$('.row#d-rank')。每个(函数(){
entry=parseFloat($('.row#d-value').text().replace('$','');
$(本).text(((分录/总和)*100)).toFixed(2)+'%');
});
});

1.
名称1
$70
2.
姓名2
$35
3.
名字3
$20
4.
名字4
$2

您多次使用ID,这是无效的。只有第一个id才会被引用。将项目id改为类

<div class="row">
  <span class="cell d-rank">2</span>
  <span class="cell d-name">name2</span>
  <span class="cell d-value">$35</span>
</div>


            var sum = 0.0;
    $(document).ready(function() {
      $('.row .d-value').each(function() {
        sum += parseFloat($(this).text().replace('$', ''));
      });

      $('.row .d-rank').each(function() {
        var entry = parseFloat($(this).sibling(".d-value').text().replace('$', ''));
        $(this).text((((entry / sum) * 100)).toFixed(2) + '%');
      });

    });

2.
姓名2
$35
var总和=0.0;
$(文档).ready(函数(){
$('.row.d-value')。每个(函数(){
sum+=parseFloat($(this).text().replace('$','');
});
$('.row.d-rank')。每个(函数(){
var entry=parseFloat($(this).sibling(.d-value').text().replace('$','');
$(本).text(((分录/总和)*100)).toFixed(2)+'%');
});
});

如果您无法更改HTML,则必须通过另一种方法引用它们,例如第n个child或查找attr id。例如$(this).sibling(“div[id=d-value]”(在移动设备上,稍后将改进格式)

您的代码中有重复的id,这可能会给您带来问题。我认为浏览器只计算第一个id。因此将id=“d-value”更改为class=“d-value” 改变这一点:


1.
名称1
$70
2.
姓名2
$35
3.
名字3
$20
4.
名字4
$2
var总和=0.0;
$(文档).ready(函数()
{
$('.row.d-value')。每个(函数()
{
sum+=parseFloat($(this).text().replace('$','');
});
$('.row.d-rank')。每个(函数()
{
entry=parseFloat($(this.next().next().text().replace('$','');
$(本).text(((分录/总和)*100)).toFixed(2)+'%');
});
});

在我的手机上,因此无法测试,但请尝试在输入变量前面添加var。现在的方式是,它是一个全局变量,您需要一个局部变量。您有四个元素具有相同的id,id=“d-value“。此外,#d值不能使用多次。它是一个id。请改用类。我可以将其更改为类。谢谢teynon的帮助!编辑:nvm,使用.prev代替.next。--我现在有一个小问题,我确实改变了排名的数量。(70美元1 55.12%)由于某种原因,您的修复程序停止工作。请告诉我代码。我不明白你的意思。