【问题标题】:Use of hash in jQuery selectors在 jQuery 选择器中使用哈希
【发布时间】:2012-10-16 21:29:10
【问题描述】:

我使用 jQuery 1.8.0 作为 WordPress 插件的一部分并存储鼠标单击 x/y 坐标并保留节点信息,包括父路径信息(类似于 Getting a jQuery selector for an element)。

经过一些实验后,我注意到 jQuery 无法读取我存储的某些选择器。一些例子:

html#:eq(0) -> '#' 不是必需的,但 jQuery 使用或不使用 '#' 来评估它!
body#:eq(0) -> jQuery 无法评估它,它在这一行中止/停止(不同的行为到html标签)

div#:eq(1) -> jQuery 评估这个(应该中止吗?)
div:eq(1) -> jQuery 在这一行中止/停止(应该工作?)

这是一个错误吗(如果是我会报告给 jQuery)?我从 cmets 对这个问题的理解是,当且仅当元素有 id 时才应该出现“#”,但这似乎不是 jQuery 的行为方式。

【问题讨论】:

  • 我不明白这个问题?在“怪癖”中,您是指错误吗?
  • "什么时候必须包含哈希 (#),即使不存在 id 标签,什么时候不能使用?您的第一部分和第二部分相互回答......
  • 你能用另一个版本测试吗?似乎它适用于 1.7.1
  • 你的例子和你的问题有什么关系?很明显,这些都不是 ID,您不应该在任何这些选择器中使用 #。如果您尝试报告错误,请在他们的错误跟踪器中进行。
  • 我猜我生成路径的代码不如它可能的那样好,因为它在某些情况下不应该添加“#”,在某些情况下 jQuery 是宽容的,而在其他情况下它不是。我的主要观点是,为什么 jQuery 需要为 'div#:eq(1)' 加上 #,即使这个元素没有 id?为什么 'div:eq(1)' 也不能工作?为什么 'body#:eq(0)' 挂起而 'html#:eq(0)' 没有挂起,'#' 在两者中不是多余的吗?

标签: jquery jquery-selectors


【解决方案1】:

哈希是 id CSS selector 的一部分,因此当您基于某个 id 定位元素时必须包含它,并且不能在所有其他情况下包含它。

你所有的例子都属于后一类。

【讨论】:

  • 我什至看不出这些例子与所提出的问题有任何关系。
  • 我给出的 div 示例是针对没有 id 的元素,例如
    等等等等
    。为什么这个选择器根本需要一个哈希,例如div#:eq(1)。如果我不包括 # jQuery hangs.
  • @ByronStuart:选择器不需要哈希。由于某种原因,您的代码可能存在错误或运行速度非常慢;包含哈希会导致异常并停止脚本执行,因此您看不到。你看过浏览器的 JS 控制台吗?
  • @Jon 我理解你的逻辑,但似乎恰恰相反。如果我不包含“#”,则 javascript 永远不会进入下一行代码。如果我确实包含了“#”,它会对其进行评估并继续。也许这是 1.8.0 中的一个错误?
猜你喜欢
  • 2016-01-04
  • 2012-01-30
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 2017-01-16
  • 2018-04-24
  • 2015-11-29
  • 2011-02-05
相关资源
最近更新 更多