Używam wtyczki jQuery DataTables w mojej aplikacji, a wiele moich wierszy tabeli i filtrów ma w sobie znaki specjalne, w szczególności znaki ampersands (&). Kiedy próbuję filtrować na tych kolumnach, wszystkie rekordy znikają i wyświetlają się "nie znaleziono pasujących rekordów".Jak filtrować wyniki za pomocą znaków specjalnych za pomocą wtyczki jQuery DataTables?
Próbowałem kodowania (tzn. Htmlspecialchars) i dekodowania (tj. Htmlspecialchars_decode) ciągi przed ich wydrukowaniem na stronie, ale żaden nie wydaje się działać.
Przykład: http://jsfiddle.net/gkdcZ/3/
Wszelkie pomysły, dlaczego to może się zdarzyć, i jak mogę to naprawić?
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
);
});
Aktualizacja # 1: Problem pojawia się tylko wtedy, gdy można ograniczyć kolumny. Zobacz DataTables API. Działa dobrze, gdy parametr jest ustawiony na "null". http://jsfiddle.net/gkdcZ/4/
AKTUALIZACJA # 2: Nieco bliżej. Dodanie funkcji do zamiany jednostek HTML działa dla określonych znaków (np. Znaków ampersand), ale nie działa dla innych znaków (tj. Wykrzykników i znaków zapytania). Zobacz 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, '"');
}
można zastąpić '&' z 'i'? w następujący sposób: str_replace ("&", "and", $ input); – azzy81
Nie rozumiem, co próbujesz zrobić. Czy możesz przesłać swój kod JavaScript? – pomeh
Właśnie dodano w powyższym kodzie JavaScript. Próbuję filtrować wyniki wyszukiwania w oparciu o wybór w polu wyboru. Moje pole rozwijane zawiera niektóre elementy ze znakami specjalnymi, które powodują problem. – Michael