1

何が問題なのかわかりません。次のコードは、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をアップグレードすることは私にとって選択肢ではないので、そのエスケープ正規表現の問題を知っている人はいますか?

4

1 に答える 1