2012-01-22 15 views
16

私のアプリケーションでは、jQuery DataTablesプラグインを使用しています。多くのテーブルの行とフィルタには特殊文字、具体的にはアンパサンド(&)が含まれています。これらの列をフィルタリングしようとすると、すべてのレコードが消え、「一致するレコードが見つかりません」と表示されます。jQuery DataTablesプラグインを使用して特殊文字で結果をフィルタリングする方法はありますか?

私は(つまりはhtmlspecialchars)エンコーディングを試してみましたが、デコードしている(すなわちhtmlspecialchars_decode)は、ページ上に印刷が、どちらも動作しているようだされていない前に、文字列。

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

すべてのアイデア、なぜこれが起こって、どのように私はそれを修正することができかもしれませんか?

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: 問題は、あなたが列を制限する場合にのみ発生するように見えます。 DataTables APIを参照してください。パラメータが "null"に設定されているとうまく動作します。 http://jsfiddle.net/gkdcZ/4/

更新日2: 少し近い。 HTMLエンティティを置き換える関数に追加すると、特定の文字(アンパサンド)に対しては機能しますが、他の文字(感嘆符や疑問符など)では機能しません。その特別な文字で問題を起こすのDataTableとのバグが確かにあります

+0

あなたは '&' とを交換する 'と' ことができますか?次のようにします:str_replace( "&"、 "and"、$ input); – azzy81

+2

私はあなたの試みが何をするのか分からない。あなたのJavascriptコードを投稿できますか? – pomeh

+0

上記のJavaScriptでちょうど追加されました。私はドロップダウンボックスの選択に基づいて検索結果をフィルタリングしようとしています。私のドロップダウンボックスには、問題の原因となっている特殊文字の項目がいくつかあります。 – Michael

答えて

1

を参照してください。あなたはそれらをエスケープする必要があります。

http://jsfiddle.net/cz6Bs/

注:私はエスケープのための別のリソースとしてXRegExpを追加しました。 http://xregexp.com/

+0

他の理由から、私は確かにその正規表現を維持する必要があり、特定の列のフィルタリングもかなり重要です。 – Michael

+0

ok regexをtrueに戻しました。動作するのはなぜですか?「なぜ列のフィールドにnullがあるのか​​しかわかりません... – Daniel

6

...機能するようになりました、それはすべての列に基づいてフィルタリングするには、この

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

セットを試してみてください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

バグのリファレンス: http://www.datatables.net/forums/discussion/5879/ fnfilter-does-not-decode-column-data-containing-html-special-characters/p1 – CashIsClay

+0

これは、2番目の引数をnullに戻したためにのみ機能していました。 XRegExpを使用しても動作しない特定の列(つまり0)のフィルタにコードを戻します。http://jsfiddle.net/cz6Bs/1/ – Michael

3

は、この方法を試してください。

$(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

これは修正に近づいています!:)しかし、ドロップダウンや結果に感嘆符や疑問符などの文字が含まれていると動作するようです。http://jsfiddle.net/cz6Bs/4/(オプションCとDを参照) – Michael

関連する問題