jQuery过滤器选择前两个然后下两个

时间:2017-03-31 16:45:30

标签: javascript jquery

我有以下列表:

<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的数量会有所不同。

2 个答案:

答案 0 :(得分:3)

您可以获得求和值的对象:

&#13;
&#13;
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;
&#13;
&#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'));
   }
});