[英]How can I sum values from a group of elements using jQuery?
How can I sum values from a group of elements using jQuery?如何使用 jQuery 对一组元素的值求和?
When I use console.log
and the browser shows the result it is the sum of all values from the div
elements.当我使用console.log
并且浏览器显示结果时,它是div
元素中所有值的总和。 How can I sum my values in a condition that they have the same class
?如何在它们具有相同class
的条件下对我的值求和?
let sumPartOne = 0; let sumPartTwo = 0; let sumPartTree = 0; let sumPartFour = 0; let sumPartFive = 0; for (let i = 1; i < 6; i++) { $(`.part-${i}`).each(function() { sumPartOne += isNaN($(this).text())? 0: parseInt($(this).text()); }) } console.log(sumPartOne);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="part-1">10</div> <div class="part-2">20</div> <div class="part-3">30</div> <div class="part-4">40</div> <div class="part-5">50</div> <div class="part-1">20</div> <div class="part-2">30</div> <div class="part-3">40</div> <div class="part-4">50</div> <div class="part-5">60</div>
https://jsfiddle.net/bq0md39y/22/ https://jsfiddle.net/bq0md39y/22/
The simplest way to achieve what you need to would be to build an object keyed by the part-X
value.实现您需要的最简单的方法是构建一个由part-X
值键入的 object。 You can achieve that using a common class, a data attribute and each()
, like this:您可以使用常见的 class、数据属性和each()
来实现,如下所示:
let sum = {}; $('.part').each((i, el) => sum[el.dataset.group] = (sum[el.dataset.group] || 0) + parseInt(el.innerText, 10)); console.log(sum);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="part" data-group="part-1">10</div> <div class="part" data-group="part-2">20</div> <div class="part" data-group="part-3">30</div> <div class="part" data-group="part-4">40</div> <div class="part" data-group="part-5">50</div> <div class="part" data-group="part-1">20</div> <div class="part" data-group="part-2">30</div> <div class="part" data-group="part-3">40</div> <div class="part" data-group="part-4">50</div> <div class="part" data-group="part-5">60</div>
The benefit of this approach is that it's infinitely extensible simply by amending the HTML.这种方法的好处是它可以无限扩展,只需修改 HTML。 You don't need to change the JS if any other groups of elements are added/removed.如果添加/删除了任何其他元素组,则无需更改 JS。
You need to increment variables sumPart{count}
based on iteration.您需要根据迭代增加变量sumPart{count}
。 For example when you are at "part-1" you want to increment sumPartOne
and same for "part-2" you want to increment sumPartTwo
例如,当您在“part-1”时,您想要增加sumPartOne
,而对于“part-2”,您想要增加sumPartTwo
let sumPartOne = 0;
let sumPartTwo = 0;
let sumPartThree = 0;
let sumPartFour = 0;
let sumPartFive = 0;
function addition(part, i) {
switch (part) {
case 1:
sumPartOne += isNaN(i) ? 0 : parseInt(i);
case 2:
sumPartTwo += isNaN(i) ? 0 : parseInt(i);
case 3:
sumPartThree += isNaN(i) ? 0 : parseInt(i)
case 4:
sumPartFour += isNaN(i) ? 0 : parseInt(i);
case 5:
sumPartFive += isNaN(i) ? 0 : parseInt(i);
}
}
for (let i = 1; i < 6; i++) {
$(`.part-${i}`).each(function () {
addition(i, $(this).text())
})
}
console.log('1', sumPartOne);
console.log('2', sumPartTwo);
console.log('3', sumPartThree);
console.log('4', sumPartFour);
console.log('5', sumPartFive);
ps This way you can use switch condition where you will apply same logic that you are using in your example but we will increment values based on part on which we are iterating. ps 这样,您可以使用切换条件,您将应用您在示例中使用的相同逻辑,但我们将根据我们正在迭代的部分增加值。 You will have values incremented properly for each summation than having all increments on sumPartOne
variable.与sumPartOne
变量的所有增量相比,每个总和的值都会正确增加。
Since you are using five differently named variables to store the sum of the five parts, you can use switch
to store the sums.由于您使用五个不同命名的变量来存储五个部分的总和,因此您可以使用switch
来存储总和。
let sumPartOne = 0; let sumPartTwo = 0; let sumPartThree = 0; let sumPartFour = 0; let sumPartFive = 0; for (let i = 1; i < 6; i++) { let sum = 0; $(`.part-${i}`).each(function () { sum += isNaN($(this).text())? 0: parseInt($(this).text()); }) switch(i) { case 1: sumPartOne = sum; break; case 2: sumPartTwo = sum; break; case 3: sumPartThree = sum; break; case 4: sumPartFour = sum; break; case 5: sumPartFive = sum; break; } } console.log(sumPartOne, sumPartTwo, sumPartThree, sumPartFour, sumPartFive);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="part-1">10</div> <div class="part-2">20</div> <div class="part-3">30</div> <div class="part-4">40</div> <div class="part-5">50</div> <div class="part-1">20</div> <div class="part-2">30</div> <div class="part-3">40</div> <div class="part-4">50</div> <div class="part-5">60</div>
However, it would be better to store all the sums in an object.但是,最好将所有总和存储在 object 中。
let sums = {}; for (let i = 1; i < 6; i++) { let sum = 0; $(`.part-${i}`).each(function () { sum += isNaN($(this).text())? 0: parseInt($(this).text()); }) sums[`.part-${i}`] = sum; } console.log(sums);
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div class="part-1">10</div> <div class="part-2">20</div> <div class="part-3">30</div> <div class="part-4">40</div> <div class="part-5">50</div> <div class="part-1">20</div> <div class="part-2">30</div> <div class="part-3">40</div> <div class="part-4">50</div> <div class="part-5">60</div>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.