【问题标题】:dataTables custom filtering of <tr> if class list contains a class如果类列表包含类,则 dataTables 自定义过滤 <tr>
【发布时间】:2015-08-09 06:05:46
【问题描述】:

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

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

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

我尝试过使用.nTr.className.split(" "),但它没有按预期工作。

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

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

提前感谢您的帮助!!

【问题讨论】:

    标签: jquery filter datatable datatables


    【解决方案1】:

    if 条件中的逻辑是倒退的;您需要根据是否在元素的类中找到检查的等级来返回真/假。试试这个:

    $.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

    【讨论】:

    • 在ie8中好像不行。你知道问题出在哪里吗?
    猜你喜欢
    • 1970-01-01
    • 2023-04-01
    • 2012-10-14
    • 2019-06-08
    • 2017-01-05
    • 1970-01-01
    • 2020-07-19
    • 2015-04-26
    • 1970-01-01
    相关资源
    最近更新 更多