当行有多个类时,如何按类过滤数据表行。当类列表包含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/
提前感谢您的帮助!!
答案 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;
});
另请注意,您可以通过在复选框本身上使用类和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都不需要更改。