2010-09-06 2 views
0

Мне было интересно, как я могу скрыть div, если дочерний div не существует внутри него. Каждый div будет содержать тег h2, но если div не содержит div с именем «info», я бы хотел, чтобы он был скрыт. Вот структура:jquery hide div, если дочерний div не существует

<div class="qaContainer"> (this div can stay as is, as it contains an "info" div) 
    <h2>Testing Category 03</h2> 
    <div class="info">if this div exists then this parent div can stay as is</div> 
</div> 
<div class="qaContainer"> (i need this div to be hidden as it doesn't contain a "info" div) 
    <h2>Testing Category 04</h2> 
</div> 

Приветствия

ответ

2

Я предполагаю, что-то вроде

$('.qaContainer').not($('.info').parent()).hide(); 

бы работать.

3

может быть Очевидным решением

$('.qaContainer').each(function() { 
    $(this)[0 == $(this).find('.info').size() ? 'hide' : 'show'](); 
}); 

** EDIT **

Решение очевидно, потому что он не использует фантазии селекторы или условные; он просто находит все нужные элементы (здесь, любые элементы с классом «qaContainer») и перебирает их. В функции обратного вызова цикла скройте или покажите элемент, который в настоящее время повторяется, в зависимости от того, существует ли дочерний элемент с «info» класса CSS. Это решение скроет или покажет элементы, поэтому оно является универсальным и многоразовым; просто выполняйте эти три строки всякий раз, когда DOM изменяется, и вы хотите обновить элементы «qaContainer».

+0

+1. Хотя это работает, я думаю, было бы немного более полезно объяснить, почему это «очевидное решение». –

+0

хорошо, решение отредактировано :) –

+0

Это действительно интересное решение (хотя, как кто-то, кто работает с CSS больше, я обычно нахожу селекторы более интуитивными). Я думаю, что '.length' будет лучше вызова функции. –

Смежные вопросы