Я хочу, чтобы поиск возвращал только результаты, которые соответствуют всем тегам (.match jQuery) - PullRequest
0 голосов
/ 02 сентября 2018

Я использую несколько функций jQuery для возврата результатов поиска на мой веб-сайт. В основном возвращаются элементы, которые соответствуют определенным тегам, которые я дал объектам. Проблема в том, что я хочу вернуть только те элементы, которые соответствуют ВСЕМ тегам, которые я ищу. Прямо сейчас, если я добавлю несколько тегов в поле поиска, он вернет результаты, соответствующие ЛЮБОМУ из тегов. Это возможно?

Вот мой код:

var $input = $('#myInput');
$input.on('keyup', search)

function myFunction(e) {
    // Declare variables
    var $q, $el, tags, match, tags;

    $q = e.target.value
    var $list = $container.children('li')

    if ($q.length < 2) {
        $list.hide();
        return;
    }

    console.log('list', $list)
    queryTags = $q.split(',').map(tag => tag.trim())
    console.log('tags', tags)

    $list.each(function(index, el) {            
        $el = $(el)
        tags = $el.attr('data-tags')

        for (var j = 0; j < queryTags.length; j++) {    
            match = tags.match(queryTags[j])            

            if (match) {
                $el.show();
                break;
            } else {
                $el.hide();
            }
        }
    })

1 Ответ

0 голосов
/ 02 сентября 2018

Перебирайте теги с every, чтобы проверить, все ли они совпадают. Кроме того, когда вы просто проверяете, содержит ли строка другую, вы должны использовать .includes - используйте .match, когда используете регулярное выражение.

$list.each(function(index, el) {
    $el = $(el)
    if (queryTags.every(queryTag => tags.includes(queryTag))) $el.show();
    else $el.hide();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...