У меня есть простая разметка, чтобы нарисовать выпадающее меню и несколько дивов различной сложности:JQuery: скрыть мульти-глубину всех DIVs, а затем показать один
<select class='sel'>
<option data-opt='a'>show only 'a' boxes</option>
<option data-opt='b'>show only 'b' boxes</option>
<option data-opt='*'>show all</option>
</select>
<div class='holder'>
<div class='a'>
<div>
<p>Here is some text (A)</p>
</div>
<p>Plus more stuff in here.</p>
</div>
<div class='a'>
<p>More text (A)</p>
</div>
<div class='b'>
<p>Here is other text (B)</p>
<div><span>There is more in here!</span></div>
</div>
<div class='b'>
<p>Even more text (B)</p>
</div>
</div>
И когда пользователь выбирает опцию из раскрывающийся, я хочу, чтобы скрыть DIVs, которые не совпадают, и только показать DIVs, которые соответствуют:
$('.sel').change(function() {
opt = $(this).find(":selected").data('opt');
console.log('option chosen: '+opt);
if(opt == '*') { // select all
console.log('show all');
$('.holder').show();
} else { // hide all but this
$('.holder :not(div'+opt+')').hide();
$('.holder').find('div'+opt).show();
}
});
Однако, по какой-то причине он не работает. Похоже, что метод hide() скрывает каждый элемент (включая дочерние/родственные братья из главных DIV), а затем метод show() показывает только начальный DIV. И опция show-all вообще не работает. Таким образом, есть некоторые проблемы с глубиной. Как я могу это исправить?
JSFiddle: http://jsfiddle.net/pnoeric/FjEBY/3/
Не забудьте выбрать ответ, что вы используете :) –