Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/84.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/229.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用jQuery求和值_Jquery - Fatal编程技术网

使用jQuery求和值

使用jQuery求和值,jquery,Jquery,我有几个动态生成的div行,其中包含div。每个div在自定义容器中都包含一个值。结构看起来像这样: <div class="mainDiv"> <div class="block"> <div data-a="2"></div> <div data-b="3"></div> </div> <div class="block">

我有几个动态生成的div行,其中包含div。每个div在自定义容器中都包含一个值。结构看起来像这样:

<div class="mainDiv">
    <div class="block">
        <div data-a="2"></div>
        <div data-b="3"></div>
    </div>

    <div class="block">
        <div data-a="1"></div>
        <div data-b="3"></div>
    </div>

    <div class="block">
        <div data-a="5"></div>
        <div data-b="2"></div>
    </div>
</div>

<div class="mainDiv">
    <div class="block">
        <div data-a="2"></div>
        <div data-b="3"></div>
    </div>

    <div class="block">
        <div data-a="1"></div>
        <div data-b="3"></div>
    </div>

    <div class="block">
        <div data-a="5"></div>
        <div data-b="2"></div>
    </div>
</div>

我想我已经接近了…

无论传递到该函数中的是什么,都必须是一个项目数组(或一个生成项目数组的选择器)
.attr
不返回数组,它返回集合中第一个元素的属性值,因此这就是传入的全部内容:单个值

但是,这一项仍然不正确,因为
这是
.mainDiv
,而不是具有
data-a
属性的子元素,而是
.mainDiv
。在每个
.mainDiv
中,您需要找到具有您要查找的属性的所有元素,然后将它们映射到该属性的值,并对结果值集求和:

$(".mainDiv").each(function(){
    var views = sumTotals($(this).find('div[data-a]').map(function () {
      return $(this).data('a');
    });

    var ptcps = sumTotals($(this).find('div[data-b]').map(function () {
      return $(this).data('b');
    });
});

。。。或者只是将数组相加,这可能更简单。

确实很接近,但下面看一下代码:

sumTotals = function(context, selector) {
    var sum = 0;
    $('[data-'+selector+']', context).each(function() {
        sum += 1*($(this).data(selector));
    });
    return sum;
}

$(".mainDiv").each(function(){
    var views = sumTotals(this, "a");
    var ptcps = sumTotals(this, "b");
    console.log(views, ptcps)
});
您可以看到,在这段代码中,您传递了上下文和想要获取的数据-*


类似的方法也能奏效——尽管无可否认,我没有把a | b分开。我想你想要的是一个综合的总数。其他人有很好的分离解决方案:PTCP和视图

var ttlNum = 0;
var totals = jQuery('.mainDiv').find('div').map(function(){
     return jQuery(this).data('a') || jQuery(this).data('b');
}).each(function(i,v){
   ttlNum += v;
})

示例数据中只有一个元素具有
class=“mainDiv”
。。。可能需要循环执行
class=“block”
instead@poncha不,请再读一遍,这里有几个
.mainDiv
,问题清楚地表明“我需要计算每个.mainDiv中data-a和data-b的总数”。
var ttlNum = 0;
var totals = jQuery('.mainDiv').find('div').map(function(){
     return jQuery(this).data('a') || jQuery(this).data('b');
}).each(function(i,v){
   ttlNum += v;
})