Ich habe Probleme beim Initialisieren eines Datatables-Suchfilters, um Sonderzeichen zu ignorieren. Ich verwende die Technik aus den Daten accent neutralise plugin.Datatables-Filter ignorieren Sonderzeichen mit HTML-Daten
Es funktioniert ordnungsgemäß mit Zeichenfolge Daten, aber nicht mit HTML-Daten in der Tabelle. Mein Testfall verwendet Namen mit Variationen des Buchstabens u (mit oder ohne Umlaut) ... u, ü, U, Ü Ich möchte, dass der Filter Ergebnisse für den Namen "tuv" anzeigt, unabhängig von der Großschreibung oder dem Umlaut auf u.
STRING Beispiel:
Suche nach „TUV“ findet alle Fälle, und zwar unabhängig von Akzenten ... aber Spalte „Name“ Art nicht ordnungsgemäß funktioniert.
http://jsfiddle.net/lbriquet/hdq8bLqn/
HTML Beispiel:
Suche nach "TUV" findet nur unbetonten Matches .. aber Spalte "Name" Art korrekt funktioniert. Hier http://jsfiddle.net/lbriquet/cj2s501L/
ist der Initialisierungscode:
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();
});
});
ich denke, die strip html plugin angepasst werden könnte, dieses Problem zu lösen. Ich habe es geschafft, ein Sonderzeichen zu ersetzen, aber ich muss in der Lage sein, mehrere zu ersetzen. Die Spaltensortierung funktioniert auch mit dieser Methode korrekt.
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'
}]
});
});
Kann mir jemand eine Hand mit diesem geben?
Nun, habe ich einen kleinen Einblick in das Problem, aber noch nicht eine Lösung. Wenn Sie 'alert (typeof data +' '+ data); 'als erste Zeile Ihrer Funktion eingeben, werden Sie feststellen, dass keine der Daten in der Spalte Name an die Funktion übergeben wird, wenn Sie einen Link darin haben. Ich werde sagen, dass dies daran liegt, dass die Funktion nur String-Eingaben akzeptiert und Ihr Link-Typ keine Zeichenfolge ist. Ich verstehe nicht ganz, was Allan Jardine mit 'jQuery.fn.dataTable.ext.type.search.string' gemacht hat, aber ich vermute, dass das eine Änderung erfordert, so dass es Links im Funktionsaufruf enthält. – BobRodes