【问题标题】:Why = instead of - in selector results selects all为什么 = 而不是 - 在选择器结果中选择所有
【发布时间】:2016-10-07 19:35:57
【问题描述】:

我在使用 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,但是,它会刷新所有具有 classtop-right-dataspans 的内部 HTML。为什么我在修复之前遇到了这种行为,而不是我预期的行为?

【问题讨论】:

  • 您需要将其报告为错误。我的猜测是他们只是忽略了无效的选择器。
  • 我马上得到一个语法错误。
  • 但那是feature我的朋友;)
  • 你用的是什么 jQuery 版本?
  • 我收到了Uncaught Error: Syntax error, unrecognized expression: span.top-right-data[data=id=1] 的预期

标签: javascript jquery html jquery-selectors


【解决方案1】:

这是旧版本 Sizzle 中的一个错误,它是 jQuery 的一部分,直到 1.7(包括 1.7)。它在 1.8 的 Sizzle 重写中得到了修复(尽管它没有在 release notes 中修复的错误中列出)。

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

【讨论】:

    猜你喜欢
    • 2014-08-05
    • 1970-01-01
    • 1970-01-01
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    相关资源
    最近更新 更多