[英]How to get sum of particular class for particular name items
目前我有
var cost = document.getElementsByName('blog_linkm_one[]');
for (var i = 0; i < cost.length; i++) {
sum += parseFloat(cost[i].value);
}
这个函数给了我所有text box
名称的总和作为blog_linkm_one[]
并且它正在工作。
现在我想过滤掉它。
我有一些不同的类,如appending_div0
, appending_div1
, appending_div2
所有这几类文本框的名字SD blog_linkm_one[]
我想要的是根据他们的特定类获得相关blog_linkm_one[]
总和。
例如
类appending_div0
有3个文本框blog_linkm_one[]
它们的值是1
, 2
, 3
,所以它们的总和必须是6
类appending_div1
有5个文本框blog_linkm_one[]
它们的值是1
, 2
, 3
, 5
, 9
所以它们的总和必须是20
。
可能的答案之一......
const cls = ['appending_div0','appending_div1','appending_div2'] let sum = { any:0 } document.querySelectorAll('input[name="blog_linkm_one[]"]').forEach(el=> { sum.any += parseFloat(el.value) cls.forEach(cl=> { if (el.classList.contains(cl)) { sum[cl] = (sum[cl] ?? 0) + parseFloat(el.value) } }) }) console.log( sum )
<input type="text" name="blog_linkm_one[]" class="" value="10000" > <input type="text" name="blog_linkm_one[]" class="appending_div0" value="1" > <input type="text" name="blog_linkm_one[]" class="appending_div0" value="2" > <input type="text" name="blog_linkm_one[]" class="appending_div0" value="3" > <input type="text" name="blog_linkm_one[]" class="appending_div1" value="1" > <input type="text" name="blog_linkm_one[]" class="appending_div1" value="2" > <input type="text" name="blog_linkm_one[]" class="appending_div1" value="3" > <input type="text" name="blog_linkm_one[]" class="appending_div1" value="5" > <input type="text" name="blog_linkm_one[]" class="appending_div1" value="9" > <input type="text" name="blog_linkm_one[]" class="appending_div2" value="4" > <input type="text" name="blog_linkm_one[]" class="appending_div2" value="5" > <input type="text" name="blog_linkm_one[]" class="appending_div2" value="6" > <input type="text" name="blog_linkm_one[]" class="" value="20000" >
问题被标记为 [jQuery],因此这是一个(部分)jQuery 答案,其中包含一个链:
这是您的基本实用程序:-
function filterAndSummate(elements, className) {
return $(`.${className}`, elements) // filter
.map((i, element) => parseFloat($(element).val())) // map filtered elements to values
.get() // convert jQuery object to Array
.reduce((x, value) => x + value, 0); // summate the values
}
现在您可能想要调用filterAndSummate()
三种方式
var costElements = document.getElementsByName('blog_linkm_one[]');
let cost_1 = filterAndSummate(costElements, 'appending_div0');
let cost_2 = filterAndSummate(costElements, 'appending_div1');
let cost_3 = filterAndSummate(costElements, 'appending_div2');
var costElements = document.getElementsByName('blog_linkm_one[]');
let costs = ['appending_div0', 'appending_div1', 'appending_div2'] // array of classNames
.map(className => filterAndSummate(costElements, className)); // map to array of costs (one per className)
var costElements = document.getElementsByName('blog_linkm_one[]');
let grand_total = ['appending_div0', 'appending_div1', 'appending_div2'] // array of classNames
.map(className => filterAndSummate(costElements, className)) // map to array of costs (one per className)
.reduce((x, c) => x + c, 0); // summate all the costs to get a grand-total
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.