JQuery скрыть родительский ul

У меня есть следующий div, который содержит список выбора тегов (категорий), которые при выборе фильтруют (скрывают) любые li, содержащие выбранное слово. Это работает хорошо, однако мне бы хотелось, чтобы родительский объект был скрыт.

Например, если была выбрана неврология, я бы хотел, чтобы заголовок 2 и его родительский ul все еще были видны вместе с неврологией. Если выбран диабет, я бы хотел, чтобы родительский ul был полностью скрыт.

Может кто-нибудь помочь с этим?

HTML

<div id = "container">
    <select id = "tags">
       <option>Cancer</option>
       <option>Diabetes</option>
       <option>Obesity</option>
    </select>

    <ul class = "itemdetails">
       <li class = "heading">Heading 1</li>
       <li><a href><span class = "tagdetails">Diabetes</span></a></li>
    </ul>
    <ul class = "itemdetails">
       <li class = "heading">Heading 2</li>
       <li><a href><span class = "tagdetails">Obesity</span></a></li>
       <li><a href><span class = "tagdetails">Neurology</span></a></li>
    </ul>
</div>

Jquery

var itemlist = $('#container');
$('#tags').change( function () {
    var tagsfilter = $(this).val();
    if (tagsfilter) {
        $matches = $(itemlist).find('span.tagdetails:Contains(' + tagsfilter + ')').parent();
         $('a', itemlist).not($matches).hide();
        $matches.show();
    } else {
        $(itemlist).find("a").show();
    }
    return false;
})

Что ж, немедленный красный флаг 'span.tagdetails:Contains(' должен быть в нижнем регистре

Taplar 15.03.2019 16:38

Также в качестве примечания; itemlist уже является объектом jQuery, так что не делайте $(itemlist) и не пытайтесь перепаковать его, так как это бессмысленно. А $('a', itemlist) должно быть просто itemlist.find('a')

Taplar 15.03.2019 16:41
«Если выбран диабет, я бы хотел, чтобы родительский ul был полностью скрыт». Вы имеете в виду родительский ul неврологии?
zer00ne 15.03.2019 17:17
Как конвертировать HTML в PDF с помощью jsPDF
Как конвертировать HTML в PDF с помощью jsPDF
В этой статье мы рассмотрим, как конвертировать HTML в PDF с помощью jsPDF. Здесь мы узнаем, как конвертировать HTML в PDF с помощью javascript.
0
3
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

обновленный код.

1) $('.tagdetails:not(:contains("'+tagsfilter +'"))').closest('li').hide();

Сначала мы выбираем и скрываем все элементы li, которые не содержат текста значения выбранного параметра.

2) $('.itemdetails:not(:has(li:visible>a>span))').not('.heading').hide();

Затем мы выбираем все элементы ul с деталями класса, у которых есть видимый li дочерний элемент, который, в свою очередь, имеет потомков a и span и не имеет класса заголовка, и скрываем его.

$('#tags').change( function () {

    $('.itemdetails').show();
    $('.tagdetails').closest('li').show();
    
    var tagsfilter = $(this).val();  
    if ($('.tagdetails:contains("'+tagsfilter+'")').length > 0){
       $('.tagdetails:not(:contains("'+tagsfilter +'"))').closest('li').hide();
       $('.itemdetails:not(:has(li:visible>a>span))').not('.heading').hide();
    }
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id = "container">
    <select id = "tags">
        <option>Cancer</option>
        <option>Diabetes</option>
        <option>Obesity</option>
        <option>Others</option>
    </select>

    <ul class = "itemdetails">
        <li class = "heading">Heading 1</li>
        <li><a href><span class = "tagdetails">Diabetes</span></a></li>
    </ul>
    <ul class = "itemdetails">
        <li class = "heading">Heading 2</li>
        <li><a href><span class = "tagdetails">Obesity</span></a></li>
        <li><a href><span class = "tagdetails">Neurology</span></a></li>
    </ul>
    <ul class = "itemdetails">
        <li class = "heading">Heading 3</li>
        <li><a href><span class = "tagdetails">Diabetes</span></a></li>
        <li><a href><span class = "tagdetails">Others</span></a></li>
    </ul>
</div>

Это работает фантастически, однако я заметил, что если Диабет также фигурирует, скажем, в Заголовке 3, он не показывает ни одного из них.

user3189734 18.03.2019 12:05

Для обработки этого случая код потребует sm-изменений. Я постараюсь обновить решение в ближайшее время.

ssamuel 18.03.2019 14:48

Код был обновлен для выбора и отображения повторяющихся значений под разными заголовками. Надеюсь, это поможет.

ssamuel 19.03.2019 19:01

Это абсолютно идеально. Работает как шарм. Большое спасибо за то, что уделили этому время.

user3189734 20.03.2019 15:13

Другие вопросы по теме