何が問題なのかわかりません。次のコードは、Chrome (v29) では適切に機能しますが、Firefox (v23) では機能しません。
// some test data
var serviceOptions = '<optgroup label="Domiciliary Care"><option value="1">Meals</option><option value="2">Personal Hygiene</option></optgroup><optgroup label="Live in Care"><option value="3">Housekeeping and Cleaning</option><option value="4">Assisted Mobility</option></optgroup>';
var cat = "Live in Care";
// escape illegal characters
var escaped_cat = cat.replace(/([ #;&,.+*~\':"!^$[\]()=>|\/@])/g, "\\$1");
var options = $(serviceOptions).filter("optgroup[label='" + escaped_cat + "']").html();
var expectedOptions = '<option value="3">Housekeeping and Cleaning</option><option value="4">Assisted Mobility</option>';
// OK in Chrome, ERROR in FF
console.log(options == expectedOptions ? "OK" : "ERROR")
// passing the string directly instead of using a var works on FF
options = $(serviceOptions).filter("optgroup[label='Live\ in\ Care']").html();
console.log(options == expectedOptions ? "OK" : "ERROR")
お分かりのように、目標は単純です: 特定の optgroup によって一連のオプションをフィルタリングすることです。jQuery Web サイトを開いてコンソールを開き、コードをコピーして貼り付けることでテストできます。その間、何かを発見したら、この投稿を更新します。
更新 フィードバックをありがとう: jQuery 1.9.1. jQuery をアップグレードするか、文字をエスケープしないと、Firefox で期待どおりの結果が得られます。
jQueryをアップグレードすることは私にとって選択肢ではないので、そのエスケープ正規表現の問題を知っている人はいますか?