gpt4 book ai didi

javascript - jQuery dataTable - 如何搜索与多个选项完全匹配的列

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:12:15 25 4
gpt4 key购买 nike

我有一列包含“A、A+、A、B+、B...”等级别。我有过滤器的复选框,可以让您选择多个框并过滤结果。该过滤器可与多个过滤器一起使用,但我似乎无法获得完全匹配的过滤器。我用它创建了一个正则表达式,输出类似“C-|C|C+”的内容。

如果您单击“C”框,它会显示带有“C”、“C+”和“C-”的结果。我只需要捕获“C”。我做错了什么?

$('.dataTable').DataTable({               
"order": [[ 0, 'asc' ]],
bFilter:true,
"search": {
"regex": true
}
});

$("input[name='tourneyLevel']").on("change", function(e) {
var levelSelected = [];
$("input[name='tourneyLevel']:checked").each(function(index, city) {
levelSelected.push([$(this).val()]);
});

var regex = levelSelected.join("|");
console.log(regex);

$('.dataTable').DataTable().column(4).search(regex, true, false).draw();
});

最佳答案

如果您需要根据与精确(多个)标准的完全匹配来过滤数据,您将需要在 View 中的某个位置使用这些标准才能使用它们。这意味着,您需要为“C”、“C+”和“C-”分别勾选复选框,这样当您选中它时,您可以引用该元素值 (val())。

您的示例,采用外部搜索 $.fn.DataTable.ext.search因此可能看起来像:

//define data source
var srcData = [
{subject: 'math', student: 'Peter Jackson', score: 'C+'},
{subject: 'math', student: 'Steven Spielberg', score: 'A'},
{subject: 'math', student: 'Jeffrey Abrams', score: 'A+'},
{subject: 'math', student: 'George Lucas', score: 'A-'},
{subject: 'math', student: 'Martin Scorsese', score: 'A'},
];
//define data table
var dataTable = $('#mytable').DataTable({
sDom: 't',
data: srcData,
columns: [
{title: 'subject', data: 'subject'},
{title: 'student', data: 'student'},
{title: 'score', data: 'score'}
]
});
//create dynamically score checkboxes
var scores = dataTable.column(2).data().unique().sort().toArray();
var checkboxes = scores.reduce((elements, item) => elements+=`<input type="checkbox" class="score" value="${item}">${item}</input>`,'');
$('body').append(checkboxes);
//employ external search
var scroresChecked = [];
$.fn.DataTable.ext.search.push((settings, row) => scoresChecked.indexOf(row[2]) > -1 || scoresChecked.length == 0);
//listenr for checkboxes change, grab checked, redraw table
$('.score').on('change', function(){
scoresChecked = [...$('.score:checked')].map(checkbox => $(checkbox).val());
dataTable.draw();
});
<!doctype html>
<html>
<head>
<script type="application/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script type="application/javascript" src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
</head>
<body>
<table id="mytable"></table>
</body>

虽然这个示例是可行的,但每当您需要在具有更多选项的多个列中进行过滤时,它可能会变得笨拙,您可能需要考虑另一种用户界面方法(例如下拉菜单或输入字段)。所以,following DataTable 插件可能会派上用场。

所以,同样的例子可能看起来漂亮整洁:

//define data source
var srcData = [
{subject: 'math', student: 'Peter Jackson', score: 'C+'},
{subject: 'math', student: 'Steven Spielberg', score: 'A'},
{subject: 'math', student: 'Jeffrey Abrams', score: 'A+'},
{subject: 'math', student: 'George Lucas', score: 'A-'},
{subject: 'math', student: 'Martin Scorsese', score: 'A'},
];
//define data table
var dataTable = $('#mytable').DataTable({
sDom: 'tF',
data: srcData,
columns: [
{title: 'subject', data: 'subject'},
{title: 'student', data: 'student'},
{title: 'score', data: 'score'}
]
});
<!doctype html>
<html>
<head>
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script type="application/javascript" src="https://cdn.mfilter.tk/js/mfilter.min.js"></script>
<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css">
<link rel="stylesheet" type="text/css" href="https://cdn.mfilter.tk/css/mfilter.min.css">
</head>
<body>
<table id="mytable"></table>
</body>
</html>

关于javascript - jQuery dataTable - 如何搜索与多个选项完全匹配的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43707091/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com