我有一个看起来像这样的查询:
$("div.modal:visible select#DTE_Field_calculator\\.type")
理论上,它会尝试在当前可见的<select>
元素中找到div.modal
标记。
不幸的是,它会根本不返回,尽管DOM看起来与您期望的完全一样(<div class="modal">...<select id="DTE_Field_calculator.type">...
)
如果我删除了:visible
(div.modal ...
)过滤器,则会成功找到目标选择标记。
如果我删除了.modal
(div:visible ...
)类选择器,它将再次成功找到正确的选择标记。
但是当组合使用时,我会收到一个空数组。
我能够解决问题的唯一方法是在:visible
documentation page上实现性能提示,并像这样更改选择器:
$("div.modal").filter(":visible").find("select#DTE_Field_calculator\\.type")
这已经足够了,当然性能更高,但我有点困惑,为什么选择器不会起作用。我认为它没有理由以我观察到的方式行事。
有谁知道为什么:visible
过滤器选择器与.modal
类选择器一起会以某种方式导致整个选择失败?我错过了一些明显的东西吗?
答案 0 :(得分:1)
为了解释这个'错误',我猜你使用了无效的HTML标记,使用重复的ID。
要解释为什么一个方法在第二个工作时失败,请注意,ID选择器仅返回第一个匹配的元素。
从右到左阅读此$("div.modal:visible select#DTE_Field_calculator\\.type")
,将第一个元素与ID匹配,然后检查父.modal
是否可见。
此$("div.modal").filter(":visible").find("select#DTE_Field_calculator\\.type")
正在搜索类modal
的所有元素,过滤可见元素,然后查找ID为DTE_Field_calculator.type
的元素。
这可以解释它。所以解决方案是使用CLASS,而不是ID。