我在初始化Datatables搜索筛选器时忽略特殊字符时遇到了一些麻烦。我正在使用数据表中的技术 accent neutralise plugin.Datatables filter忽略html数据中的特殊字符
它适用于字符串数据,但不适用于表格中的html数据。我的测试用例使用名称变体字母ü(带或不带变音符号)... u,ü,U,Ü我希望过滤器显示名称为“tuv”的结果,不管大写字母还是你的变音。
STRING例如:
搜索“TUV”找到所有的情况下,无论口音......但“名称”列排序功能不正常。
http://jsfiddle.net/lbriquet/hdq8bLqn/
HTML例如:
搜索 “TUV” 发现非重音的比赛..但 “名称” 列排序功能正常。 http://jsfiddle.net/lbriquet/cj2s501L/
这里是初始化代码:
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, 'u')
.replace(/ê/g, 'e')
.replace(/î/g, 'i')
.replace(/ô/g, 'o')
.replace(/è/g, 'e')
.replace(/ï/g, 'i')
.replace(/ã/g, 'a')
.replace(/õ/g, 'o')
.replace(/ç/g, 'c')
.replace(/ì/g, 'i') :
data;
};
$(document).ready(function() {
var oTable = $('#example').DataTable();
// Remove accented character from search input as well
$('#example_filter input').keyup(function() {
oTable
.search(
jQuery.fn.dataTable.ext.type.search.string(this.value)
)
.draw();
});
});
我觉得strip html plugin可以适用于解决这个问题。我的工作是替换一个特殊字符,但我需要能够替换几个。列排序也适用于此方法。
https://jsfiddle.net/lbriquet/ueo8x7up/
(function() {
var _div = document.createElement('div');
jQuery.fn.dataTable.ext.type.search.html = function(data) {
_div.innerHTML = data;
return _div.textContent ?
_div.textContent.replace(/[üÜ]/g, 'u') :
_div.innerText.replace(/[üÜ]/g, 'u');
};
})();
$(document).ready(function() {
var oTable = $('#example').DataTable({
"columnDefs": [{
"type": "html",
"targets": '_all'
}]
});
});
谁能给我个忙?
好了,我得到了一些洞察到问题,但还没有一个解决方案。如果你插入'alert(typeof data +''+ data);'作为函数的第一行,你会注意到Name列中的数据在链接中没有传递给函数。我要说,这是因为该函数只接受字符串输入,并且您的链接类型不是字符串。我不太明白Allan Jardine用'jQuery.fn.dataTable.ext.type.search.string'做了什么,但我怀疑这就是需要修改的地方,因此它会在函数调用中包含链接。 – BobRodes