Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/391.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/2/jquery/86.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
Javascript 元素包含的特定类的jQuery计数_Javascript_Jquery - Fatal编程技术网

Javascript 元素包含的特定类的jQuery计数

Javascript 元素包含的特定类的jQuery计数,javascript,jquery,Javascript,Jquery,我有一个表,表中的每一行都有一个或多个类,具体取决于区域 我的桌子是这样的: <table> <thead> <th>Title</th> <th>Name</th> </thead> <tbody> <tr class="emea apac"> <td>Testing</td> <td>Bob&l

我有一个表,表中的每一行都有一个或多个类,具体取决于区域

我的桌子是这样的:

<table>
<thead>
    <th>Title</th>
    <th>Name</th>
</thead>
<tbody>
    <tr class="emea apac">
        <td>Testing</td>
        <td>Bob</td>
    </tr>
    <tr class="americas">
        <td>Testing2</td>
        <td>Jim</td>
    </tr>
    <tr class="emea">
        <td>Testing 3</td>
        <td>Kyle</td>
    </tr>
    <tr class="emea americas">
        <td>Testing 3</td>
        <td>Kyle</td>
    </tr>
    <tr class="emea apac americas">
        <td>Testing 3</td>
        <td>Kyle</td>
    </tr>
    <tr class="apac">
        <td>Testing 3</td>
        <td>Kyle</td>
    </tr>
</tbody>
我现在试图具体计算类与我的条件相等的行数

例如:

只有多少行。APAC=1

有多少行包含所有3个可能的类?=一,

我开始使用这个JSFIDLE,但无法真正思考如何从这一点入手:

使用您的小提琴

更新

我非常确定jQuery的方法适用于IE8,因此您可以将.each回调更改为:

function (i, elem) {
    var row = $(elem),
        hasApac = row.hasClass('apac'),
        hasEmea = row.hasClass('emea'),
        hasAmericas = row.hasClass('americas');
    apac += (hasApac && !hasEmea && !hasAmericas) ? 1 : 0;
    emea += (hasEmea && !hasApac && !hasAmericas) ? 1 : 0;
    americas += (hasAmericas && !hasApac && !hasEmea) ? 1 : 0;
    if (((hasApac && hasEmea) || (hasApac &&  hasAmericas) || (hasEmea && hasAmericas)) && elem.className.split(' ').length === 2) {
        combo += 1;
    }
    if (hasApac && hasEmea &&  hasAmericas) {
        all += 1;
    }
}
更新小提琴:


hasClass包括具有该类的所有行。我需要更具体一些。我要说的是,有多少行只有美国作为班级;不是有多少行包含americasSo,你可以将这个脚本与惊人的结合起来,只是我需要的。我认为可能有一种更具活力的方式来做这件事,但这是可行的,正是我所需要的。谢谢你,皮特!我知道我忘了提这件事,但直到我试过它。。。我在IE8中得到一个错误,需要使用包含indexOf的行。这些是不兼容的吗?有没有什么新的想法?
$(document).ready(function () {
    var apac = 0,
        emea = 0,
        americas = 0,
        combo = 0,
        all = 0;
    $('table tbody tr').each(function (i, elem) {
        var classes = elem.className.split(' '),
            hasApac = classes.indexOf('apac') > -1,
            hasEmea = classes.indexOf('emea') > -1,
            hasAmericas = classes.indexOf('americas') > -1;
        apac += (hasApac && !hasEmea && !hasAmericas) ? 1 : 0;
        emea += (hasEmea && !hasApac && !hasAmericas) ? 1 : 0;
        americas += (hasAmericas && !hasApac && !hasEmea) ? 1 : 0;
        if (((hasApac && hasEmea) || (hasApac &&  hasAmericas) || (hasEmea && hasAmericas)) && classes.length === 2) {
            combo += 1;
        }
        if (hasApac && hasEmea &&  hasAmericas) {
            all += 1;
        }
    });
    $('span[name="apac"]').text(apac);
    $('span[name="emea"]').text(emea);
    $('span[name="americas"]').text(americas);
    $('span[name="combo"]').text(combo);
    $('span[name="all"]').text(all);
});
function (i, elem) {
    var row = $(elem),
        hasApac = row.hasClass('apac'),
        hasEmea = row.hasClass('emea'),
        hasAmericas = row.hasClass('americas');
    apac += (hasApac && !hasEmea && !hasAmericas) ? 1 : 0;
    emea += (hasEmea && !hasApac && !hasAmericas) ? 1 : 0;
    americas += (hasAmericas && !hasApac && !hasEmea) ? 1 : 0;
    if (((hasApac && hasEmea) || (hasApac &&  hasAmericas) || (hasEmea && hasAmericas)) && elem.className.split(' ').length === 2) {
        combo += 1;
    }
    if (hasApac && hasEmea &&  hasAmericas) {
        all += 1;
    }
}
Object.size = function(obj) {
    var size = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) size++;
    }
    return size;
};

function countOnlyClass(classFindA)
{
    var $trA=$('table tbody tr');
    var count=0; 

    if(classFindA.length>0){

        $trA.each(function(){

            var c=0;    
            var m=0;
            var $tr=$(this);
            var classA = $tr.attr('class').split(' ');

            $.each(classA,function(i,cl){
                if(classFindA.indexOf(cl)>-1) c++; else m++;
            })

            if(c>0 && c==classFindA.length && m==0) count++;

        })
    }        

    return count;
}    

function comboOnlyClass(comboCount)
{
    var $trA=$('table tbody tr');
    var count=0; 

    $trA.each(function(){

        var countClass = {};

        var $tr=$(this);
        var classA = $tr.attr('class').split(' ');

        $.each(classA,function(i,cl){
            if(!cl in countClass )             
                countClass.cl=1;
        })

        if(Object.size(classA )==comboCount) count++;

    })

    return count;
}

var a=countOnlyClass(['apac'])
$('#apac').html(a);

var a=countOnlyClass(['emea'])
$('#emea').html(a);

var a=countOnlyClass(['americas'])
$('#americas').html(a);

var a=countOnlyClass(['apac','emea','americas'])
$('#all').html(a);

var a=comboOnlyClass(2);
$('#combo').html(a);

//var a=comboOnlyClass(1); onlu one class