我有一行jQuery代码导致错误,因为我在b类前放置了两个句点。我想知道jQuery如何解释以下行?如果我只有一个句点在b前面而不是两个,我假设jQuery将其解释为:“如果类b存在于类a的父类中,则存在于此类警告提示中”。
if ( $(this).parent().find(".a ..b") ) {
alert("hi");
});
答案 0 :(得分:8)
.a ..b
是一个无效的选择器,它会抛出错误:
Uncaught Error: Syntax error, unrecognized expression: .
.a .b
是正确的选择器。
因此$(this).parent().find(".a .b")
将首先获取this
的直接父节点,然后它将搜索具有class="a"
的后代元素,然后搜索class="b"
内的另一个后代元素如果它发现它将提醒hi
。
答案 1 :(得分:3)
这可能取决于浏览器。在Internet Explorer 9和Firefox 10.0中,选择器都不会找到任何内容,而是返回一个空的jQuery对象。
当您使用jQuery对象作为if
中的条件时,if
中的代码将始终运行。 jQuery对象始终是非伪造的值,因此无论jQuery是否从选择器中找到任何内容,条件将始终评估为true
。
如果要检查是否找到了某些内容,请使用length
属性:
if ( $(this).parent().find(selector).length ) {