2012-01-22 14 views
16

Sto utilizzando il plug-in jQuery DataTables nella mia applicazione e molte delle mie righe e dei miei filtri contengono caratteri speciali, in particolare e commerciali (&). Quando provo a filtrare su queste colonne, tutti i record scompaiono e visualizza "nessun record corrispondente trovato".Come filtrare i risultati con caratteri speciali usando il plugin jQuery DataTables?

Ho provato la codifica (cioè htmlspecialchars) e la decodifica (cioè htmlspecialchars_decode) delle stringhe prima che vengano stampate sulla pagina, ma nessuna sembra funzionare.

Esempio: http://jsfiddle.net/gkdcZ/3/

Tutte le idee perché questo potrebbe accadere, e come posso risolvere il problema?

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 
    ); 
});  

UPDATE # 1: problema sembra accadere solo quando si limita la colonna. Vedi DataTables API. Funziona bene quando il parametro è impostato su "null". http://jsfiddle.net/gkdcZ/4/

UPDATE # 2: Un po 'più vicino. L'aggiunta di una funzione per sostituire le entità HTML funziona per determinati caratteri (ad esempio e commerciali), ma non funziona per altri caratteri (ad esempio punti esclamativi e punti interrogativi). Vedere http://jsfiddle.net/cz6Bs/4/

'\\b' + htmlEntities($('#filter_col_1').val()) + '\\b' 

function htmlEntities(str) { 
return String(str).replace(/&/g, '&amp;') 
        .replace(/</g, '&lt;') 
        .replace(/>/g,  '&gt;') 
        .replace(/"/g, '&quot;'); 
} 
+0

si può sostituire la 'e' con 'e'? così: str_replace ("&", "and", $ input); – azzy81

+2

Non capisco a cosa stai provando. Puoi pubblicare il tuo codice Javascript per favore? – pomeh

+0

Appena aggiunto in JavaScript sopra. Sto cercando di filtrare i risultati della ricerca in base a una selezione di caselle a discesa. La mia casella a discesa contiene alcuni elementi con caratteri speciali, il che causa il problema. – Michael

risposta

1

provare questo

$('#results').dataTable().fnFilter(
     $("#filter_col_1").val(), 
     null, 
     true 
    ); 

insieme a filtrare su tutte le colonne, ora funziona ...

+0

Per altri motivi, ho sicuramente bisogno di mantenere la regex in atto, e anche il filtraggio di colonna specifico è abbastanza importante. – Michael

+0

ok set regex di nuovo al vero, funziona ... dunno circa il "perché funziona solo con null nel campo colonna ... – Daniel

6

V'è infatti un bug con DataTable che causa problemi con eventuali caratteri speciali in modo dovrai fuggire da loro.

http://jsfiddle.net/cz6Bs/

Nota: ho aggiunto XRegExp come un'altra risorsa per la fuga. http://xregexp.com/

+0

di riferimento sul bug: http://www.datatables.net/forums/discussion/5879/ fnfilter-does-not-decode-column-data-contenenti-html-special-characters/p1 – CashIsClay

+0

Funzionava solo perché hai cambiato il secondo argomento in null (vedi altra risposta elencata qui e la mia aggiornata pubblicata sopra). cambia il tuo codice per filtrare sulla colonna specifica (cioè 0) non funziona nemmeno con XRegExp http://jsfiddle.net/cz6Bs/1/ – Michael

3

provare questo:

$(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, '&amp;').replace(/</g, '&lt;').replace(/>/g,  '&gt;').replace(/"/g, '&quot;'); 
} 
+0

questo si sta avvicinando a una correzione! :) Non funziona sembra funzionare comunque se ci sono altri caratteri come un punto esclamativo o un punto interrogativo nel menu a discesa e nei risultati. http://jsfiddle.net/cz6Bs/4/ (vedi le opzioni C e D ora) – Michael

Problemi correlati