为什么 = 而不是 - 在选择器结果中选择全部

Why = instead of - in selector results selects all

我在使用 jQuery 时遇到了一个非常奇怪的行为。我有一个 function 这样的:

            function refreshTechBubble(techID, value) {
                $("span.top-right-data[data-id=" + techID + "]").html(value);
            }

function 刷新特定技术人员气泡。为了使它更简单和更专业,我们只声明此函数更改通过 "span.top-right-data[data-id=" + techID + "]" 的选择器唯一找到的 span 的内部 html。这一切都很好,一切正常。

但是,在执行此操作时,我打错了字,导致执行不正确:

            function refreshTechBubble(techID, value) {
                $("span.top-right-data[data=id=" + techID + "]").html(value);
            }

注意,我不小心写了 = 而不是 -。虽然修复是微不足道的,此时我没有任何问题要解决,但我仍然想知道我在测试期间遇到的行为的原因。有了这样的错字,我希望 jQuery 找不到任何标签,因此不会刷新它们的内部 html,但是,它会刷新所有 span 的内部 HTML classtop-right-data。为什么我在修复之前遇到了这种行为,而不是我预期的行为?

这是旧版本 Sizzle 中的一个错误,它是 jQuery 1.7 及更高版本的一部分。它在 1.8 的 Sizzle 重写中得到修复(虽然它没有列在 release notes 中修复的错误中)。

有趣的是,当属性选择器单独出现或由显式通用选择器限定时,jQuery 的所有版本似乎都能正确抛出 SYNTAX_ERR。只有当属性选择器被任何其他简单选择器(出现在它之前或之后)限定时,它才不会导致 SYNTAX_ERR.