Bra*_*roy 1 jquery if-statement jquery-selectors
我有这个选择器:
$('ul:not(.sub-menu) > li, ul.sub-menu > li:last-child').not(':has(ul.sub-menu)');
获得这些元素:
li父母不是的 每个直系后裔.sub-menu(除非是最后一个,参见2).ul.sub-menuli作为父母的所有人ul.sub-menu现在,我想在if语句中使用它,它在hover-function中.换句话说,它必须是相对于列表项目,而不是作为列表项.
像这样的东西:
$("nav li").hover(function () {
var $this = $(this);
if (($this.parent("ul:not(.sub-menu)") || ($this.parent("ul.sub-menu") && $this.is(":last-child"))) && $this.not(":has(ul.sub-menu)")) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
但这不起作用.我认为它与在if语句中组合OR和AND选择器有关,但我似乎无法调试它:上面的代码选择所有列表项而没有区别.
$this.parent("ul:not(.sub-menu)") 即使该集合为空,也绝不是假的.
使用$this.parent("ul:not(.sub-menu)").length,而不是在你的病情.
因此整个if语句看起来像这样:
if (
(
$this.parent("ul:not(.sub-menu)").length
|| ( $this.parent("ul.sub-menu").length && $this.is(":last-child") )
) && !$this.hasClass("sub-menu")
) {
// do something
}
Run Code Online (Sandbox Code Playgroud)
细节 :
if ($('#a')) { // always verified
if ($('#a').length>0) { // verified if there is an element with id a
if ($('#a').length) { // identical to last one
Run Code Online (Sandbox Code Playgroud)
正如MDN所写:
可转换为false的表达式示例包括求值为null,0,空字符串("")或未定义的表达式