我想要隐藏所有仅包含隐藏DIV的块(除了标题)。必须通过类名选择所有元素。
详细地说,我希望当下面的所有“groupBlocks”都已隐藏时,不会显示每个“eventBlock”。与“菜单”相同,当隐藏所有子事件块时,不应显示该菜单。
每个“菜单”包含多个eventBlocks,
每个“eventBlock”包含一个或多个groupBlocks。
我正在使用类,不能使用ID,因为有很多groupBlocks,eventBlocks等。
使用JQuery的“hide()”函数隐藏DIV,如果它是相关的。
我的HTML基本上是这样的:
<div class="Menu">
<strong><a name="one">Menu CAPTION</a></strong><br />
<div class="eventBlock event1">
<p class="underlined">eventBlock CAPTION</p>
<div class="groupBlock group2">
<strong>name</strong><br />
4pm - 6pm<br />
</div>
<div class="groupBlock group1">
<strong>name</strong><br />
5pm - 7pm<br />
</div>
</div>
</div>
答案 0 :(得分:2)
这应该有效:
var blocks = jQuery(".groupBlock");
if( blocks.size() == blocks.not(":visible").size() )
{
blocks.parents(".eventBlock").hide();
}
如果隐藏了所有groupBlock,您可以执行类似的操作来隐藏菜单。
答案 1 :(得分:2)
最简单的方法是使用单个jQuery选择器:
$('.eventBlock:not(:has(.groupBlock:visible))').hide();
就个人而言,我发现not()
函数更具可读性,我可以稍后使用end()
:
$('.eventBlock').not(':has(.groupBlock:visible)').hide();
现在,你想要隐藏Menu
吗?如果Menu没有可见的eventBlocks,那么它似乎应该被隐藏,这意味着它没有可见的groupBlocks。因此,我们可以使用与以前相同的条件:
$('.eventBlock, .Menu').not(':has(.groupBlock:visible)').hide();
答案 2 :(得分:1)
$('eventBlock').each(function() {
if ($('.groupBlock:visible', this).length)
$(this).show();
else
$(this).hide();
});
可以作为插件实现