if语句中的OR和AND组合
我有这个选择器:
$('ul:not(.sub-menu) > li, ul.sub-menu > li:last-child').not(':has(ul.sub-menu)');
获得这些元素:
- 每个直接的
li
后代,其父母不是.sub-menu
(除非它是最后一个,参见2.) -
ul.sub-menu
每个最后一个li元素 - 排除作为
ul.sub-menu
父级的所有li
现在,我想在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 } });
但这不起作用。 我认为它与在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 }
细节 :
if ($('#a')) { // always verified if ($('#a').length>0) { // verified if there is an element with id a if ($('#a').length) { // identical to last one
正如MDN所写:
可以转换为false的表达式示例是那些计算为null,0,空字符串(“”)或未定义的表达式