chrome和Firefox中相同jQuery代码的结果不同

时间:2013-09-03 13:25:39

标签: javascript jquery google-chrome firefox

我无法弄清问题是什么。以下代码适用于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网站,打开控制台并复制粘贴代码来测试它。 同时如果我发现了什么,我会更新这篇文章。

更新 感谢您的反馈: 它使用jQuery 1.9.1在firefox上找到问题与非法字符的转义有关。升级jQuery或不转义字符会在Firefox下产生预期的结果。

由于升级jQuery对我来说不是一个选项,任何人都知道这个转义正则表达式的问题是什么?

1 个答案:

答案 0 :(得分:4)

似乎是旧版jQuery的问题,但不是新版本的问题。尝试将jQuery更新为1.10

Not working old version of jQuery including migrate 1.9.1 JSFIDDLE

Working new version of jQuery 1.10.1 JSFIDDLE

jQuery主站点正在运行旧版本的jQuery