dataTables自定义过滤if类列表包含一个类

时间:2015-05-27 08:55:45

标签: jquery filter datatable datatables

当行有多个类时,如何按类过滤数据表行。当类列表包含I类过滤器时,我需要在任何实例中出现行。

<tr class="gradeA">...</tr>
<tr class="gradeA gradeC">...</tr>
<tr class="gradeC">...</tr>

"gradeA gradeC"的行应出现在两个实例中。

我已尝试使用.nTr.className.split(" "),但无法按预期工作。

我已经设置了jsFiddle。两个类的行都有&#34; 1有两个类&#34;在第一列中作为标记,以帮助查看是否出现在两个列表中。

http://jsfiddle.net/lbriquet/k6seLxkm/

提前感谢您的帮助!!

1 个答案:

答案 0 :(得分:0)

if条件中的逻辑是倒退的;如果在元素的类中找到已检查的等级,则需要返回true / false。试试这个:

$.fn.dataTableExt.[afnFiltering][1].push(function (oSettings, aData, iDataIndex) {
    var myRowClasses = oSettings.aoData[iDataIndex].nTr.className.split(" ");

    if ($('#ckb-gradeA').is(':checked')) {
        return myRowClasses.indexOf('gradeA') > -1;
    } else if ($('#ckb-gradeC').is(':checked')) {
        return myRowClasses.indexOf('gradeC') > -1;
    }

    return false;
});

Example fiddle

另请注意,您可以通过在复选框本身上使用类和data属性来使此逻辑更通用,例如:

<input type="radio" name="RadioGroup1" class="grade-check" data-grade="gradeA" checked="checked" />grade A
<input type="radio" name="RadioGroup1" class="grade-check" data-grade="gradeB" />grade B
<input type="radio" name="RadioGroup1" class="grade-check" data-grade="gradeC" />grade C
$.fn.dataTableExt.afnFiltering.push(function (oSettings, aData, iDataIndex) {
    var myRowClasses = oSettings.aoData[iDataIndex].nTr.className.split(" ");
    var grade = $('.grade-check:checked').data('grade');    
    return myRowClasses.indexOf(grade) > -1;
});

使用此模式意味着无论添加多少等级复选框,JS都不需要更改。

Example fiddle