jQuery 伪选择器的奇怪行为:可见
Strange behaviour with jQuery pseudo selector :visible
我有一个看起来像这样的查询:
$("div.modal:visible select#DTE_Field_calculator\.type")
理论上,这会尝试在当前可见的 div.modal
元素中找到 <select>
标签。
不幸的是,它 return 什么都没有,尽管 DOM 看起来完全符合您的预期 (<div class="modal">...<select id="DTE_Field_calculator.type">...
)
如果我删除 :visible
(div.modal ...
) 过滤器,它会成功找到目标 select 标签。
如果我删除 .modal
(div:visible ...
) class select 或者,它将再次成功找到正确的 select 标签。
但是当组合使用时,我收到一个空数组。
我能够解决问题的唯一方法是在 :visible
documentation page 上实施性能提示,然后更改 select 或者像这样:
$("div.modal").filter(":visible").find("select#DTE_Field_calculator\.type")
这就足够了,当然性能更高,但我有点困惑为什么 selector 一开始就不起作用。我看不出它为什么会以我观察到的方式运行。
有谁知道为什么 :visible
过滤器 selector 与 .modal
class selector 结合使用会以某种方式导致整个 select离子失败?我是否漏掉了一些明显的东西?
为了解释这个 'bug',我猜你使用了无效的 HTML 标记,使用了重复的 ID。
要解释为什么一种方法失败而第二种方法有效,请注意,ID 选择器 returns 仅匹配第一个元素。
这个 $("div.modal:visible select#DTE_Field_calculator\.type")
从右到左读取,匹配第一个元素和 ID,然后检查父元素 .modal
是否可见。
此 $("div.modal").filter(":visible").find("select#DTE_Field_calculator\.type")
正在搜索具有 class modal
的所有元素,过滤可见元素,然后查找 ID 为 DTE_Field_calculator.type
.
的元素
这样就可以解释了。所以解决方案是使用 CLASS,而不是 ID.
我有一个看起来像这样的查询:
$("div.modal:visible select#DTE_Field_calculator\.type")
理论上,这会尝试在当前可见的 div.modal
元素中找到 <select>
标签。
不幸的是,它 return 什么都没有,尽管 DOM 看起来完全符合您的预期 (<div class="modal">...<select id="DTE_Field_calculator.type">...
)
如果我删除 :visible
(div.modal ...
) 过滤器,它会成功找到目标 select 标签。
如果我删除 .modal
(div:visible ...
) class select 或者,它将再次成功找到正确的 select 标签。
但是当组合使用时,我收到一个空数组。
我能够解决问题的唯一方法是在 :visible
documentation page 上实施性能提示,然后更改 select 或者像这样:
$("div.modal").filter(":visible").find("select#DTE_Field_calculator\.type")
这就足够了,当然性能更高,但我有点困惑为什么 selector 一开始就不起作用。我看不出它为什么会以我观察到的方式运行。
有谁知道为什么 :visible
过滤器 selector 与 .modal
class selector 结合使用会以某种方式导致整个 select离子失败?我是否漏掉了一些明显的东西?
为了解释这个 'bug',我猜你使用了无效的 HTML 标记,使用了重复的 ID。
要解释为什么一种方法失败而第二种方法有效,请注意,ID 选择器 returns 仅匹配第一个元素。
这个 $("div.modal:visible select#DTE_Field_calculator\.type")
从右到左读取,匹配第一个元素和 ID,然后检查父元素 .modal
是否可见。
此 $("div.modal").filter(":visible").find("select#DTE_Field_calculator\.type")
正在搜索具有 class modal
的所有元素,过滤可见元素,然后查找 ID 为 DTE_Field_calculator.type
.
这样就可以解释了。所以解决方案是使用 CLASS,而不是 ID.