计算显示无元素

时间:2013-06-15 04:09:57

标签: javascript jquery hidden

     var checkLeft= $('#left .module:hidden');
     if(checkLeft) {
        if($('.resetLeft').length) {
          left.prepend('<span class="resetLeft">Reset Left Widgets</span>');
         }
     }

尝试使其正常工作时遇到一些麻烦。因为我真的不想要:hidden伪类,因为我认为IE不支持这个。基本上我做了一个函数,这个代码就在其中。当它运行时,它会检查父元素#left是否有类display:none的任何.module子元素我使用了过滤器函数,并且必须隐藏两个元素以实际正确响应。有什么好主意吗?

这是一个已启动的JSBIN

http://jsbin.com/upuwix/1/edit

1 个答案:

答案 0 :(得分:2)

(部分)jQuery的观点是它可以跨浏览器工作。 :hidden在所有浏览器中都充当jQuery选择器 - doco说它“是jQuery扩展,而不是CSS规范的一部分”。

但是,您的if测试不正确:

if(checkLeft) {

...将永远是真的,因为你正在测试jQuery对象本身 - 对象总是真实的。您需要测试.length以查看是否有任何元素与您的选择器匹配:

if (checkLeft.length) {

在那之后的那一行你已经使用了同样的技术:

   if($('.resetLeft').length) {

...除了那一行你有逻辑向后 - 如果长度为0,你想要它是真的,即如果还没有.resetLeft元素,那么要么添加!.length === 0的条件或测试开始时:

   if(!$('.resetLeft').length) {

最后,left.prepend(...)无效,因为您没有left变量。定义它或使用$('#left').prepend(...)

更新了演示:http://jsbin.com/upuwix/3/edit