Javascript 使用Datatable插件进行无重音搜索
我正在使用Datatable插件来搜索表。此外,为了能够搜索包含重音的单词,而不必指出重音,我添加了以下代码,删除了单词中的所有重音:Javascript 使用Datatable插件进行无重音搜索,javascript,jquery,datatable,Javascript,Jquery,Datatable,我正在使用Datatable插件来搜索表。此外,为了能够搜索包含重音的单词,而不必指出重音,我添加了以下代码,删除了单词中的所有重音: jQuery.fn.DataTable.ext.type.search.string = function ( data ) { return ! data ? '' : typeof data === 'string' ? data .replace( /\n/g, ' ' )
jQuery.fn.DataTable.ext.type.search.string = function ( data ) {
return ! data ?
'' :
typeof data === 'string' ?
data
.replace( /\n/g, ' ' )
.replace( /[áâàä]/g, 'a' )
.replace( /[éêèë]/g, 'e' )
.replace( /[íîìï]/g, 'i' )
.replace( /[óôòö]/g, 'o' )
.replace( /[úûùü]/g, 'u' )
.replace( /ç/g, 'c' ) :
data;
};
这适用于表中的任何搜索。但现在我需要能够在另一个表中执行相同的操作,该表的单元格内容是列表或按钮,因为我需要能够使用sortable jquery ui将table元素拖动到另一个列表中
也就是说,我有以下结构:
<table class="scrollTable dataTable" role="grid" aria-describedby="info">
<thead class="fixedHeader">
...
</thead>
<tbody class="scrollContent">
<tr role="row">
<td class="sorting_1">
<button >Peter</button>
</td>
</tr>
...
</tbody>
</table>
...
彼得
...
或
...
- 彼得
...
我需要能够转换带有重音的单词,并使用上面提到的代码,但在jQuery.fn.DataTable.ext.type.search.string=…
因为它只引用单元格的文本,而不是按钮或列表
非常感谢您的帮助。以下代码将使用非重音等效项在列中搜索重音字符。它还支持搜索html内容的内部文本 它通过设置一个新的列类型来支持搜索html文本,以及“规范化”它可能具有的任何重音字符。我已经调用了这个新的列类型
html字符串
。您只需要将此特定列类型应用于包含html的列。在搜索过程中,其他列的重音将自动“正常化”:
// set up a custom column type to strip html tags and normalise the characters for searching
$.fn.dataTableExt.ofnSearch['html-string'] = function(sData) {
// strip html tags (you will need to test this regex for your needs. Source from http://stackoverflow.com/a/25885923/1544886)
sData = sData.replace(/( |<([^>]+)>)/ig, "");
// apply character normaliser to this column type
return jQuery.fn.DataTable.ext.type.search.string(sData);
}
jQuery.fn.DataTable.ext.type.search.string = function(data) {
return !data ?
'' :
typeof data === 'string' ?
data
.replace(/έ/g, 'ε')
.replace(/[ύϋΰ]/g, 'υ')
.replace(/ό/g, 'ο')
.replace(/ώ/g, 'ω')
.replace(/ά/g, 'α')
.replace(/[ίϊΐ]/g, 'ι')
.replace(/ή/g, 'η')
.replace(/\n/g, ' ')
.replace(/á/g, 'a')
.replace(/é/g, 'e')
.replace(/í/g, 'i')
.replace(/ó/g, 'o')
.replace(/ú/g, 'u')
.replace(/ê/g, 'e')
.replace(/î/g, 'i')
.replace(/ô/g, 'o')
.replace(/è/g, 'e')
.replace(/ï/g, 'i')
.replace(/ü/g, 'u')
.replace(/ã/g, 'a')
.replace(/õ/g, 'o')
.replace(/ç/g, 'c')
.replace(/ì/g, 'i') :
data;
};
如代码中所述,您应该测试我选择的html剥离正则表达式。这是我的榜样
演示非常感谢@KScandrett,它很有效。但我有一个疑问,这是为了寻找带有重音但不插入重音的单词,但如果我想要两者,我该怎么办?因为在这种情况下,如果我输入带有重音的单词,我将无法识别它。请使用本页底部示例中的代码-非常感谢,我以前见过它,但我认为它是相同的。我已经解决了。
// set up a custom column type to strip html tags and normalise the characters for searching
$.fn.dataTableExt.ofnSearch['html-string'] = function(sData) {
// strip html tags (you will need to test this regex for your needs. Source from http://stackoverflow.com/a/25885923/1544886)
sData = sData.replace(/( |<([^>]+)>)/ig, "");
// apply character normaliser to this column type
return jQuery.fn.DataTable.ext.type.search.string(sData);
}
jQuery.fn.DataTable.ext.type.search.string = function(data) {
return !data ?
'' :
typeof data === 'string' ?
data
.replace(/έ/g, 'ε')
.replace(/[ύϋΰ]/g, 'υ')
.replace(/ό/g, 'ο')
.replace(/ώ/g, 'ω')
.replace(/ά/g, 'α')
.replace(/[ίϊΐ]/g, 'ι')
.replace(/ή/g, 'η')
.replace(/\n/g, ' ')
.replace(/á/g, 'a')
.replace(/é/g, 'e')
.replace(/í/g, 'i')
.replace(/ó/g, 'o')
.replace(/ú/g, 'u')
.replace(/ê/g, 'e')
.replace(/î/g, 'i')
.replace(/ô/g, 'o')
.replace(/è/g, 'e')
.replace(/ï/g, 'i')
.replace(/ü/g, 'u')
.replace(/ã/g, 'a')
.replace(/õ/g, 'o')
.replace(/ç/g, 'c')
.replace(/ì/g, 'i') :
data;
};
var table = $('#example').DataTable({
"columnDefs": [{
"type": "html-string",
"targets": [2]
}]
});