Извините, если это не то, что вы ищете, но результат, который вы хотите, всегда показывает li
, а его дочерний элемент ol
скрыт,
Test
1
2
3
Another test
Cool Test
1
2
Но ваш css почему-то скрывает элементы li
.
#newlist li {
display:none;
list-style: none;
}
Если вы вместо этого спрятали ol
элементы
#newlist ol {
display:none;
}
Вы можете просто сделать фильтр и показывать их по мере необходимости.
$('#newlist').show().find('ol').filter(function() {
return $(this).children().length > 1;
}).show();
В противном случае, если вы не можете изменить свой CSS, вам нужно проделать немного больше работы, чтобы убедиться, что все отображается правильно.
Что-то вроде:
$('#newlist').show().children('li').show().children('ol').filter(function() {
return $(this).children().length > 1;
}).children().show();
EDIT:
Возможно, есть несколько способов добавить то, что вы хотите, в коллекцию.
Вот один. Он захватывает все элементы li
, а затем фильтрует их, так что сохраняются только те из них, которые имеют хотя бы одного брата.
Фильтр применяется и к элементам li
верхнего уровня, но это нормально, поскольку их больше одного (у них есть братья и сестры).
var $collection = $('#newlist').find('li').filter(function() {
return ($(this).siblings('li').length );
});
$collection.show();
Поскольку filter()
возвращает результат логического теста, выполнение
return ($(this).siblings('li').length );
возвращает true, если длина больше 0.
Есть (я уверен) множество других способов, но этот кажется довольно лаконичным. Кажется, немного лучше, чем мой первоначальный ответ.