php - example - datatables search input
¿Cómo filtrar resultados con caracteres especiales usando el complemento jQuery DataTables? (3)
De hecho, hay un error con las tablas de datos que causa problemas con cualquier carácter especial, por lo que tendrás que escapar de ellos.
Nota: Agregué XRegExp como otro recurso para el escape. http://xregexp.com/
Estoy usando el complemento jQuery DataTables en mi aplicación, y muchas de las filas y filtros de mi tabla tienen caracteres especiales, específicamente ampersands (&) en ellos. Cuando intento filtrar en estas columnas, todos los registros desaparecen y muestra "no se encontraron registros coincidentes".
He intentado codificar (es decir, htmlspecialchars) y decodificar (es decir, htmlspecialchars_decode) las cadenas antes de que se impriman en la página, pero ninguna parece funcionar.
Ejemplo: http://jsfiddle.net/gkdcZ/3/
¿Alguna idea de por qué podría estar pasando esto y cómo puedo solucionarlo?
HTML:
<select id="filter_col_1" name="filter_col_1">
<option value="">Select</option>
<option value="A&B">A&B</option>
<option value="C">C</option>
<option value="D">D</option>
</select>
<tr>
<td>A&B</td>
<td>Jones, Brandon</td>
<td>01/02/2003</td>
</tr>
JavaScript:
$("#filter_col_1").change( function() {
$(''#results'').dataTable().fnFilter(
''//b'' + $("#filter_col_1").val() + ''//b'',
1,
true,
false
);
} );
ACTUALIZACIÓN # 1: El problema parece ocurrir solo cuando limita la columna. Ver la API de DataTables . Funciona bien cuando el parámetro se establece en "nulo". http://jsfiddle.net/gkdcZ/4/
ACTUALIZACIÓN # 2: Un poco más cerca. Agregar una función para reemplazar las Entidades HTML funciona para ciertos caracteres (es decir, ampersands), pero no funciona para otros caracteres (es decir, signos de exclamación y signos de interrogación). Ver http://jsfiddle.net/cz6Bs/4/
''//b'' + htmlEntities($(''#filter_col_1'').val()) + ''//b''
function htmlEntities(str) {
return String(str).replace(/&/g, ''&'')
.replace(/</g, ''<'')
.replace(/>/g, ''>'')
.replace(/"/g, ''"'');
}
Prueba este:
$(document).ready(function() {
$(''#results'').dataTable();
$("#filter_col_1").change( function() {
$(''#results'').dataTable().fnFilter(
''//b'' + htmlEntities($(''#filter_col_1'').val()) + ''//b'',
0,
true,
false
);
} );
});
function htmlEntities(str) {
return String(str).replace(/&/g, ''&'').replace(/</g, ''<'').replace(/>/g, ''>'').replace(/"/g, ''"'');
}
prueba esto
$(''#results'').dataTable().fnFilter(
$("#filter_col_1").val(),
null,
true
);
configurarlo para filtrar en todas las columnas, funciona ahora ...