我正在使用jQuery和带有自定义分面导航的DataTable。我创建了一个以管道分隔的每个复选框的值列表,以便为dataTable填充fnFilter。取消选中一个框,它会重建没有该值的列表。它的工作正常,除非有“工程”和“机械工程”等值。如果选中“工程”值,但“机械工程”值不是,则“机械工程”不受限制(因为“工程”值符合两者的标准)。我正在尝试使用REGEX修改字符串以将术语限制为字符串。
第一排工程
第二排机械工程
第三排工程,机械工程,电气工程
因此,通过取消选中“工程”,第二行和第三行将保留,但第一行将过滤掉。
我修改了这个以包含更完整的代码。我不知道如何在这里设置演示,但我很乐意这样做。
//dataTable configuration
$('#directoryTable').dataTable({
"sDom": 'lprtpi',
"iDisplayLength": 25,
"aLengthMenu": [[10, 25, 50, 100, -1], [10, 25, 50, 100, "All"]],
"aaSorting": [[0,'asc'],[1,'asc']],
"aoColumns": [
{"bSortable": true},
{"bSortable": true},
{"bSortable": false},
{"bSortable": false,"sSortDataType": "dom-checkbox" }
]
})
//custom filtering on industry clusters
var oTable = $('#directoryTable').dataTable();
$('input[class="cluster"]').click(function(){
//get list of values of checked boxes in cluster class
var checkedList = $('input[class="cluster"]:checked').map(function() {return this.value;}).get().join('|');
//var checkedList = $('input[class="cluster"]:checked').map(function() {return "^"+this.value+",|^"+ this.value+"$|,"+ this.value+"$|,"+ this.value+",";}).get().join('|');
window.console&&console.log(checkedList);
//limit results to selected values
if ($('input[class="cluster"]').is(":checked")) {
//uses a REGEX filter with a | delimited (OR) filter, only on the third column
oTable.fnFilter(checkedList, 2, true,false);
//window.console&&console.log('clicked ' + $(this).val());
//clear the filter when unchecked
} else {
oTable.fnFilter('',2);
oTable.fnFilter('');
}
});
我是jQuery的新手,我真的很感激任何想法。
答案 0 :(得分:1)
我很抱歉,如果这是基础,但没有你的代码的全部广度,我无法确定我在这里有什么是有效的。我希望它有所帮助。
var reg = /^Engineering$/gi;
var a = ['Mechanical Engineering','engineering','Silver Mining','Engineering','Silver and Gold','Electrical Engineering'];
var items = jQuery(a).filter(function(i,v){
return reg.test(v);
}).get().join('|');
// items returns engineering|Engineering
// I believe your reg, would just be value of the element that is clicked/unclicked.
所以,如果你想动态传递它,请执行以下操作:
//some function to capture the arg/checkbox value
var val = arg,
reg = new RegExp('\^' + val + '\$', "gi");
reg.test(v); // v being the string passed in for your reiteration.