Как я могу скрыть элементы, которые содержат только скрытые DIVs в jQuery? - PullRequest
0 голосов
/ 10 марта 2009

Я хочу скрыть все блоки, которые содержат только скрытые DIV (кроме подписи). Все элементы должны быть выбраны через имена классов.

Подробно, я хочу, чтобы каждый «eventBlock» не отображался, когда все «groupBlocks» под ним уже скрыты. То же самое с «Меню», которое не должно отображаться, когда все дочерние блоки событий скрыты.

Каждое «Меню» содержит несколько блоков событий,

каждый «eventBlock» содержит 1 или более групповых блоков.

Я использую классы и не могу использовать идентификаторы, потому что есть много groupBlocks, eventBlocks и т.д.

DIV скрыты с помощью функции JQuery «hide ()», если это уместно.

Мой 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>

Ответы [ 3 ]

2 голосов
/ 10 марта 2009

Самый простой способ - использовать один селектор jQuery:

$('.eventBlock:not(:has(.groupBlock:visible))').hide();    

Лично я нахожу функцию not() более читабельной, и я могу использовать end() позже:

$('.eventBlock').not(':has(.groupBlock:visible)').hide();

Теперь, вы также хотите скрыть Menu? Кажется, что меню должно быть скрыто, если у него нет видимых eventBlocks, что означает, что у него нет видимых групповых блоков. Итак, мы можем использовать то же условие, что и раньше:

$('.eventBlock, .Menu').not(':has(.groupBlock:visible)').hide();
2 голосов
/ 10 марта 2009

Это должно работать:

var blocks = jQuery(".groupBlock");
if( blocks.size() == blocks.not(":visible").size() )
{
  blocks.parents(".eventBlock").hide();
}  

Вы можете сделать нечто подобное, чтобы скрыть меню, если все групповые блоки скрыты.

1 голос
/ 10 марта 2009
$('eventBlock').each(function() {
    if ($('.groupBlock:visible', this).length)
        $(this).show();
    else
        $(this).hide();
});

может быть реализовано как плагин

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...