我有以下列表:
<li class="list one" data-number="2"></li>
<li class="list one" data-number="2"></li>
<li class="list two" data-number="3"></li>
<li class="list two" data-number="7"></li>
我需要将data-number
属性中的每个值传递给基于列表类的变量。
我有这些功能:
var list_one = 0;
var list_two = 0;
$(".one").each(function (i, val) {
var number = $(this).data('number')
list_one = list_one + parseInt(number); // Gives 4
});
$(".two").each(function (i, val) {
var number = $(this).data('number')
list_two = list_two + parseInt(number); // Gives 10
});
但是随着列表的增长,这将变成一个冗长而混乱的代码。从前两个li
获得值的最佳方法是什么,然后是下一个,等等,并将总和传递给变量?
列表将始终具有此结构,因此我不需要确定每个类的li
的数量会有所不同。
答案 0 :(得分:3)
您可以获得求和值的对象:
var result = {};
$('.list').each(function(idx, ele) {
var key = ele.classList.toString().replace(/ /g, '_');
result[key] = (+result[key] || 0) + +ele.dataset["number"];
});
console.log(result);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
<li class="list one" data-number="2">one</li>
<li class="list one" data-number="2">one</li>
<li class="list two" data-number="3">two</li>
<li class="list two" data-number="7">tow</li>
</ul>
&#13;
答案 1 :(得分:0)
我相信这会奏效,它可以节省每两个数字的总和。因此,如果您有20个元素,则listValues的长度为10
var listValues = [];
$('li.list').each(function(i, val){
if (i % 2 == 0) {
listValues[] = parseInt($(this).data('number'));
} else {
listValues[listValues.length - 1] += parseInt($(this).data('number'));
}
});