0

我有一个非常简单的 JS/jQuery 片段,用于从页面中提取一些内容:

(function (idx) { 
  var product = $(".product_wrapper img")[idx]; 
  return (product && product.src) ? product.src.match(/([^]+)\\_/)[1] : "" 
}(0)).split('_')[1]

在大多数浏览器中都可以正常工作,但 IE7 和 IE8 会抛出错误。在 IE7 中读取错误消息[object Error],在 IE8 中读取SyntaxError: Expected '/'.

有人知道这段代码有什么问题吗?我是否使用了一些 MSIE 不喜欢的语法糖?一直对这个感到困惑,我很难过。

4

3 回答 3

1

如果product.src.match(/([^]+)\\_/)为空

product.src.match(/([^]+)\\_/)[1]会导致对象错误

于 2012-12-12T04:04:40.500 回答
0

最简单的中断示例(至少在 IE8 中)是这样的:

"foo".match(/[^]/);

问题是^括号中的意思是“否定”,所以它期望某些东西被否定。IE因此中断,可以通过转义克拉来解决(如果这是您要搜索的内容):

"foo".match(/[\^]/);

Firefox 似乎解释[^].它不会中断。从您的代码示例中不清楚您试图从 URL 中提取什么。如果您在代码中寻找克拉,请避开您在原始帖子中的内容。如果您只是在寻找任何字符,因为它在 Firefox 中有效,请.改用。

于 2012-12-13T20:28:02.963 回答
0

第一步是弄清楚为什么“更好”的浏览器 IE 8 会出错。它给出的错误似乎是指缺少正则表达式初始化终止符,即“/”字符(正斜杠)。您的正则表达式语法适用于 IE 9:

"foo".match(/([^]+)\\_/); 

而且我很确定它也可以在 IE 8 上运行。我建议验证上述是否适用于 IE 8,然后检查以确保当您看到错误时,实际运行的代码就是您所拥有的。要验证这一点,您可以手动清除 IE 8 中的浏览器缓存,然后重新加载您的代码/网页。

于 2012-12-12T05:55:53.230 回答