Jquery - найти div с классом, который содержит определенный класс с заданным текстовым значением - PullRequest
0 голосов
/ 06 февраля 2020

Мне нужна помощь jquery. Это мой HTML код:

<div class="searchable"><span class="tag">Cool</span><span class="tag">Beautiful</span></div>
<div class="searchable"><span class="tag">Not Cool</span><span class="tag">Tall</span></div>
<div class="searchable"><span class="something">...</span></div>

Что мне нужно найти: 1) div с именем класса "searchable" 2) для этих div, найти те, которые имеют элементы span с классом "Tag", потому что не все доступные для поиска div имеют класс тэгов 3) найдите в ЛЮБЫХ тэгах текстовое значение, не равное миру "Cool". Таким образом, в приведенном выше примере, должны быть возвращены второй и третий div. Другими словами, если какой-либо тег имеет текстовое значение Cool, не возвращайте его. И мне нужно вернуть «доступный для поиска» div, а не элементы span.

Я пробовал это:

        $('.searchable .tag:textNotEquals("Cool")').each(function () {
            $(this).closest('.searchable').hide();
        });

textNotEquals реализованы так:

    $.expr[':'].textNotEquals = $.expr.createPseudo(function (arg) {
        return function (elem) {
            return !$(elem).text().match("^" + arg + "$");
        };
    });

Мой код выше работает частично, возвращается только первое совпадение. Если у меня есть несколько совпадений div, это не работает. Кроме того, я надеялся, что есть простой способ сделать это. Мой код кажется слишком сложным. Буду признателен за любую оказанную помощь.

1 Ответ

0 голосов
/ 06 февраля 2020

Я почти уверен, что этого нельзя сделать только с помощью селекторов. Вам придется что-то придумать.

Например:

$('.searchable').filter((idx, el) => $(el).find('span.tag').map((idx, el) => $(el).text()).get().indexOf('Cool') === -1);

В Engli sh найти все class="searchable" элементы, в которых нет тега <span class = " ">` элементы, содержащие одно слово 'Cool'.

В качестве альтернативы, инвертируйте логи c и используйте .not:

$('.searchable').not($('span.tag').filter((idx, el) => $(el).text() === 'Cool').closest('.searchable'));

В Engli sh найдите все class="searchable" элементов, но исключают те, в которых есть хотя бы один <span class = "tag"> `элемент, содержащий одно слово« Cool ».

Оба подхода могут упроститься с дальнейшими усилиями

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