2017-11-14 2 views
1

私の質問には、チェックボックスとマルチ選択ドロップダウンを使用して列のフィルタを適用するが、このオリジナルフィドルに基づいています:https://jsfiddle.net/x92c3qu2/データテーブル

これは私が探しています例のようなものです。 しかし、私の問題は、任意の値に特殊文字(丸括弧など)がある場合、その例は機能しないことです。

これは私のコードです -

$('#dropdown').multiselect({ 
    onChange: function(element, checked) { 

     var cities = $('#dropdown option:selected'); 

     var selected = []; 
     $(cities).each(function(index, city) { 
     selected.push([$(this).val()]); 
     }); 

     var regex = selected.join("|"); 

     $('#table').DataTable().column(1).search(
     regex, true, false, true 
    ).draw(); 
    } 
    }); 
}); 

https://jsfiddle.net/x92c3qu2/110/元のリンクとほぼ同じ - 私が編集しフィドル、この中に今

、あなたは "(パリ)フランス" を選択した場合、それはテーブルにレコードがあるにもかかわらず、結果を表示しません。

(検索(regax、真、偽、真)を変更することで試してみました - 。しかし、動作しません

あなたは "パリ" を選択した場合、それは "パリ" に関連する両方のレコードを示しています - 。値がドロップダウンから選択するときには、正確な結果を示すべき間違っている私に従っ

とし、特殊文字なしの複数の値を選択してみてください - 。結果は奇妙です

してください。それ以上の説明が必要な場合はお知らせください。

答えて

0

正規表現を正確な文字列に一致させるには、検索文字列を^$の文字でカプセル化する必要があります。文字列が正確な文字列と一致する必要がある場合は、searchメソッドのsmartオプションを無効にすることができます。

エントリ(パリ)フランスとの2つの問題があります。あなたのサンプルではoption要素の値をParis_Franceに設定していますが、テーブルにはまだ(パリ)フランスですので、変更する必要があります。値を追加するとき 第二の問題は、(あなたは、この場合には脱出すべき正規表現での特殊文字であるということであるが、このような何かを考えてみます。

selected.push(['^(' + $(this).val().replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&') +')$']);

私は提案された変更を使用してJS fiddleを編集しました。

+0

あなたShifftyをありがとうございます。問題を解決しました。乾杯人.. !!!問題は、私は適切な正規表現の部分を適用することができませんでした。再度、感謝します。 –

+0

もう1つ。提供されたソリューションは、クロムとモザイクでうまく機能します。しかし、同じRegexはIE 11で動作しません。「DASH/HYPHEN」**の前にスペースがあるときです。私はIE 11、バージョン11.674.15063を使用しています。私はRegexを修正しようとしました。また、 '\ s'を使って試してみました。しかしIE11ではうまくいきませんでした。誰でも助けてくれますか? –

+0

例:ABCD - WXYZ(クロームで動作)、ABCD-WXYZ(クロームで動作)。 ABCD-WXYZ(IE11で動作します)。 **しかし、**、ABCD - WXYZは、再生可能例で新しい質問を考えてみましょう@The_Geek –