测试元素是否隐藏

时间:2013-06-16 19:01:06

标签: javascript jquery function hidden

好的家伙所以我正在测试元素是否被隐藏,问题是如果隐藏了父元素,那么孩子们也被认为是隐藏的,所以我附加的行即使是非技术上的子元素也会附加显示:无“

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

我在页面加载时运行此脚本,并且在任何子元素被点击时都被隐藏。如果隐藏了父元素但没有隐藏任何子元素(显示:无),如何阻止脚本分配前添加的元素?

所以基本上。

如果隐藏#left(父级)并且没有孩子,我不希望resetLeft被添加。但是如果隐藏了#left并且显示了它的一个或多个子节点:则不会先添加{{1}}。即使左边没有隐藏,我也需要这项工作。

2 个答案:

答案 0 :(得分:3)

这应该这样做:

var visible = $('#left').is(':hidden') && $('#left').children('.module').filter(function() {
    return this.style.display === 'none';
}).length === 0;

但这似乎是一个黑客。你为什么被迫这样做?

答案 1 :(得分:1)

我采取了Blender所说的那样做但我改变了它以我想要的方式工作。我使用了&&和逻辑运算符......

function checkIfVisible() {
 var checkLeft=  
    $('#left').is(':visible')
    &&
    $('#left').children('.module').filter(':hidden').length > 0;
   if(checkLeft) {
       if(!$('.resetLeft').length) {
      left.prepend('<span class="resetLeft">Reset Left Widgets</span>');
     }
   }

这对我来说非常有用,我所做的只是将函数添加到显示#left元素的click函数中!