2013-04-21 76 views
0

我想隐藏父DIV,如果所有子跨度都有隐藏类。还有其他div在我的文档中具有一个或两个隐藏跨度,但我只想在所有三个孩子都隐藏类时隐藏父div。隐藏父div如果子跨度隐藏

这里是我的HTML:

<div class="example"> 
<span class="hidden">Design</span> 
<span class="hidden">Development</span> 
<span class="hidden">Branding</span> 
</div> 

我不想隐瞒父事业部,如果有一类是可见的任何span元素。因此,如果以下情况属实:

<div class="example"> 
<span class="visible">Design</span> 
<span class="hidden">Development</span> 
<span class="visible">Branding</span> 
</div> 

示例div应该仍然可见。只有在所有三个子跨度都具有隐藏类的情况下才能看到它。

而这里的jQuery的我已经试过:

$('.example').each(function(){ 
if($('.hidden')(':visible').length == 0) { 
$('.example').hide(); 
} 
}); 

不用说,它并没有奏效。

编辑:选择器改变 - 我更新我的例子是更通用的。

+0

您的div在示例中没有类项目。你的代码也是如此吗? – ckundo 2013-04-21 16:54:13

+0

[隐藏父部分如果子表被隐藏(显示:无)]的可能的重复](http://stackoverflow.com/questions/12941697/hide-parent-div-if-child-table-is-hidden-display- none) – 2013-04-21 21:27:01

+0

请注意,只有当所有三个子跨度隐藏课程时,问题才会要求解决方案。这不是重复的。 – teeray 2013-04-23 00:59:56

回答

0

鉴于HTML,我建议:

$('.example').each(function(){ 
    var that = $(this).find('.hidden'); 
    return that.length === that.not(':visible').length; 
}); 

JS Fiddle demo

这假设.example元素是您所指的相关父元素。

或者稍微另一种方法:

$('.example').css('display',function(){ 
    var children = $(this).children(); 
    return children.length === children.not(':visible').length ? 'none' : 'block'; 
}); 

JS Fiddle demo

参考文献:

+0

即使有一个孩子可见,这也会隐藏父母,因此它不起作用。 – teeray 2013-04-23 00:58:19

+0

不知何故,我误解了或错误地读了这个问题;如果所有的孩子都隐藏起来,编辑过的版本*应该*隐藏父母。 – 2013-04-23 06:57:19

0

试试这个方法,如果父DIV类是“example`

$(document).ready(function(){ 
    $('div.example .hidden').each(function(){ 
    $(this).parent().hide(); 
    }); 
}); 

$(document).ready(function(){ 
    var count = 0; 
    $('div.example .hidden').each(function(){ //take the count of hidden span tags 
    count++; 
    }); 
    $('div.example').children().each(function(){ 
    if($('div.example').children().length==count){ // check whether the count of hidden span tag element length is equal to all the child element length 
     $('div.example .hidden').parent().hide(); 
     }else{ 
      //alert('There is an visible element'); 
      } 
    }); 
}); 
+0

这也隐藏了父母,如果即使一个孩子跨度被隐藏,所以它不起作用。 – teeray 2013-04-23 00:58:38

+0

@teeray第二个答案将起作用。 – Swarne27 2013-04-23 03:57:24

0

这个答案假定正如您的示例中所述,您正在查找.example父容器的所有3个元素都具有.hidden类的情况。

var childElements = $('.example .hidden'); 

if (childElements.length === 3) { 
    $('.example').hide(); 
} 

*更新:第一个例子只适用于只有一个'.example'元素的情况。以下示例分别循环遍历每个“.example”元素。

var parents = $('.example'); 

// Loop through each parent element, finding only it's childeren 
parents.each(function(index, item) { 

    var $item = $(item), 
     childElements = $item.find('.hidden'); 

    if (childElements.length === 3) { 
     $item.hide(); 
    } 
}); 
+0

这是最接近的答案,因为它涉及隐藏父母时,所有3个孩子被隐藏,但它似乎并没有工作。 – teeray 2013-04-23 00:57:46

+0

@teeray对不起,第一个例子只适用于测试一组元素。我已经更新了示例以反映具有多个“.example”元素的页面。如果它有帮助,我也可以给一个jsFiddle链接。 – cwebbdesign 2013-04-24 07:24:15