忽略 DataTables 搜索中的特殊字符
Ignoring special characters in DataTables search
我构建了一个简单的数据表,其中包含员工姓名和各自的部门。
它工作得很好,但现在我意识到搜索正在以不同的方式过滤具有特殊字符的字符串。
例如,有 4 名员工叫 Joao,其中两人注册为 João,另外两名 Joao,没有 ã。
我怎样才能通过键入 'joao' 来忽略差异来调出其中的四个?
我找到了一个插件DataTable网站,但是我找不到运行,我不知道放在哪里:
https://datatables.net/plug-ins/filtering/type-based/accent-neutralise
这里是数据表的构造:
$('#dataTable').DataTable({
language:{
"sEmptyTable": "Nenhum registro encontrado",
"sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
"sInfoEmpty": "Mostrando 0 até 0 de 0 registros",
"sInfoFiltered": "(Filtrados de _MAX_ registros)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "_MENU_ resultados por página",
"sLoadingRecords": "Carregando...",
"sProcessing": "Processando...",
"sZeroRecords": "Nenhum registro encontrado",
"sSearch": "Pesquisar",
"oPaginate": {
"sNext": "Próximo",
"sPrevious": "Anterior",
"sFirst": "Primeiro",
"sLast": "Último"
},
"oAria": {
"sSortAscending": ": Ordenar colunas de forma ascendente",
"sSortDescending": ": Ordenar colunas de forma descendente"
},
dom:"iptrt",
}
});
$('.dataTables_filter').addClass('pull-left');
$('.dataTables_filter input').addClass('filter-input');
$('.dataTables_length').addClass('pull-right');
您可以使用重音字符(变音符号)规范化列中的数据,或者您可以将隐藏列添加到 table,这是通过使用变音符号规范化现有列中的字符串来计算的
const ds = "João";
ds.normalize('NFD').replace(/[\u0300-\u036f]/g, ""); // "Joao"
只需将 link 添加到父脚本中的 accent-neutralise.js 脚本,在 link 下方添加到 Datatables 库本身。例如,如果您从 CDN 加载(而不是在本地托管数据表):
<head>
<title>My Page with a Datatable</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/plug-ins/1.11.3/filtering/type-based/accent-neutralise.js"></script>
</head>
引用脚本的 documentation page:“这种基于类型的搜索插件将 DataTables 中的内置字符串格式化程序替换为一个函数,该函数将重音字符替换为非重音字符快速和容易过滤的对应物。"
我构建了一个简单的数据表,其中包含员工姓名和各自的部门。
它工作得很好,但现在我意识到搜索正在以不同的方式过滤具有特殊字符的字符串。
例如,有 4 名员工叫 Joao,其中两人注册为 João,另外两名 Joao,没有 ã。
我怎样才能通过键入 'joao' 来忽略差异来调出其中的四个?
我找到了一个插件DataTable网站,但是我找不到运行,我不知道放在哪里:
https://datatables.net/plug-ins/filtering/type-based/accent-neutralise
这里是数据表的构造:
$('#dataTable').DataTable({
language:{
"sEmptyTable": "Nenhum registro encontrado",
"sInfo": "Mostrando de _START_ até _END_ de _TOTAL_ registros",
"sInfoEmpty": "Mostrando 0 até 0 de 0 registros",
"sInfoFiltered": "(Filtrados de _MAX_ registros)",
"sInfoPostFix": "",
"sInfoThousands": ".",
"sLengthMenu": "_MENU_ resultados por página",
"sLoadingRecords": "Carregando...",
"sProcessing": "Processando...",
"sZeroRecords": "Nenhum registro encontrado",
"sSearch": "Pesquisar",
"oPaginate": {
"sNext": "Próximo",
"sPrevious": "Anterior",
"sFirst": "Primeiro",
"sLast": "Último"
},
"oAria": {
"sSortAscending": ": Ordenar colunas de forma ascendente",
"sSortDescending": ": Ordenar colunas de forma descendente"
},
dom:"iptrt",
}
});
$('.dataTables_filter').addClass('pull-left');
$('.dataTables_filter input').addClass('filter-input');
$('.dataTables_length').addClass('pull-right');
您可以使用重音字符(变音符号)规范化列中的数据,或者您可以将隐藏列添加到 table,这是通过使用变音符号规范化现有列中的字符串来计算的
const ds = "João";
ds.normalize('NFD').replace(/[\u0300-\u036f]/g, ""); // "Joao"
只需将 link 添加到父脚本中的 accent-neutralise.js 脚本,在 link 下方添加到 Datatables 库本身。例如,如果您从 CDN 加载(而不是在本地托管数据表):
<head>
<title>My Page with a Datatable</title>
<link rel="stylesheet" href="https://cdn.datatables.net/1.11.3/css/jquery.dataTables.min.css"/>
<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/1.11.3/js/jquery.dataTables.min.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/plug-ins/1.11.3/filtering/type-based/accent-neutralise.js"></script>
</head>
引用脚本的 documentation page:“这种基于类型的搜索插件将 DataTables 中的内置字符串格式化程序替换为一个函数,该函数将重音字符替换为非重音字符快速和容易过滤的对应物。"