jquery选择器问题:仅在隐藏所有元素时执行某些操作

时间:2010-05-23 11:49:57

标签: jquery jquery-selectors

只有当给定ul中的所有li都被隐藏时,我才需要做一些事情。这似乎没有办法。有办法吗?

if ($('#some_ul li:hidden')) {
  // do something only if all 'li's in a given ul are hidden
}

4 个答案:

答案 0 :(得分:8)

检查返回元素的长度属性。

if ( !$('#some_ul li:visible').length ) {
  // do something only if all 'li's in a given ul are hidden
}

编辑:将隐藏更改为可见


编辑:澄清使用.length属性进行布尔测试。 请参阅本答复底部的进一步说明。

$('#some_ul li:visible').length返回找到的元素数。数值等于true或false。

!给出了其真/假值的负数。

因此,如果$('#some_ul li:visible').length找到0个可见元素,则与返回false相同。

当你放置!时,它的布尔值会反转为true。因此,如果找不到visible元素,则if()中的代码将会运行。

与完成相同:

if ( $('#some_ul li:visible').length == 0 ) {
  // do something only if all 'li's in a given ul are hidden
}

...使用$('#some_ul li:visible').length的数值并使用==运算符将其转换为布尔值。


要使用:hidden,您需要先获取总长度,然后将其与隐藏长度进行比较。

var total = $('#some_ul li');

if ( $('#some_ul li:hidden').length == total ) {
  // do something only if all 'li's in a given ul are hidden
}

编辑:在回复您的评论时,为了澄清,测试中有几个值等于true / false。

以下是一些等于false的值的示例:

var someVariable;  // someVariable is undefined, equates to false

var someVariable = '';   // someVariable is an empty string, equates to false

var someVariable = false; // someVariable is a boolean false, equates to false

var someVariable = 0;  // someVariable is number zero, equates to false

var someVariable = Number('a');  // someVariable is NaN (Not a Number), equates to false 

var someVariable = null;   // someVariable is null, equates to false

以下是一些等同于true的例子:

var someVariable = "false";   // someVariable is a string, equates to true

var someVariable = 123;   // someVariable is a number greater than 0, equates to true

var someVariable = -123;   // someVariable is a number less than 0, equates to true

var someVariable = true;   // someVariable is a boolean true, equates to true

var someVariable = !false;   // someVariable is a negated value that would
                             //    otherwise be false, equates to true

如果您对任何值的有效布尔值感到好奇,请在其前面放置!!

alert( !!123 );   // Alerts true

第一个!将值转换为其有效布尔值的相反值。第二个!将其转换回有效的布尔值。

例如:

var a;  // an undefined variable

alert( a );   // alerts undefined, logically equates to 'false'

alert( !a );   // alerts the boolean opposite of undefined, which is 'true'

alert( !!a );   // alerts the converts the boolean opposite 'true' back to 'false'

答案 1 :(得分:1)

$("ul:not(:has(li:visible))")

这会选择那些没有可见<ul>个孩子的<li>。检查其length属性是否有任何属性,或者在其上调用each()为每个属性执行操作。

答案 2 :(得分:0)

你可以这样做:

if ($('#some_ul li').is(':hidden')) {
  // do something only if all 'li's in a given ul are hidden
}

答案 3 :(得分:0)

我认为这就是你想要的

if ( $('#some_ul li:hidden').length == $('#some_ul li').length ) {
  // do something only if all 'li's in a given ul are hidden
}