我有以下代码仅在Safari中导致无法识别的表达式错误。 OSX和iOS版本的Safari都会出现此错误,但在任何其他浏览器中都不会发生此错误。
控制台说: -
Error: Syntax error, unrecognized expression: li[data-page-step="1"
匹配此选择器的HTMl代码是: -
<li style=""
data-page-step="1"
data-page-label-previous="< Back"
data-page-label-next="Next"
data-page-label-number-text="{page} / {total}"
data-page-disabled="false"
data-page-hidden="false"
data-page-fid="f21"
>
这个选择器表达式失败的JS代码如下所示,我认为它必须是正确的,因为它适用于其他地方(其他浏览器)。
v = function(b) {
var c = {
step: 1,
fid: "",
hidden: !1,
labelPrevious: "Previous",
labelNext: "Next",
progressText: "",
labelNumberText: "",
disabled: !1
},
d = a('li[data-page-step="' + b + '"');
if (!d.length) return c;
for (var e in c) {
var f = d.data("page" + u(e));
c[e] = f ? f : ""
}
return c.$e = d, c
}
为什么这只会在Safari上失败? [data-next-step ...]转义看起来是正确的 - 并且可能是其他浏览器标准的正确。
答案 0 :(得分:2)
它不应该只是Safari,因为这显然缺少]
:
d = a('li[data-page-step="' + b + '"]');
// here ----------------------------^
...但我不禁注意到这在Chrome v56和Firefox v51上运行得很好,所以显然它们更宽容:
console.log(document.querySelectorAll('div[data-foo="bar"').length);
<div data-foo="bar"></div>