Правильно построить логику в each

Подскажите, как правильно построить следующую логику:

Существует множество .row строк с вложенными в них div. div'ов может быть 1, 2, 5 с относительно уникальными атрибутами и т.д. Необходимо скрывать целиком весь row, если не один из div'ов внутри него не совпадает по условию. Кроме того, внутри row, в котором нашлись совпадения, нужно скрыть те div'ы, которые не удовлетворили условию.

Когда я использую конструкцию ниже, то все срабатывает хорошо, но ровно до того момента, как в том самом .row не окажется более чем 1 div. Так получается, что в 1 div атрибут не совпадает, а в другом совпадает, но удаляется целиком строка. Как можно решить ?

$(".containerItems .row div[data-game]:not([data-search*='" + symbol + "'])").each(function(){

    $(this).parent().fadeOut("fast");                       
});

Если же убрать parent()

$(".containerItems .row div[data-game]:not([data-search*='" + symbol + "'])").each(function(){

    $(this).fadeOut("fast");                        
});

то остаются пробелы тех самых .row. Ведь display none применяется ко вложенному div, который соответствует условиям.

Примерный вид div

<div data-game="cs go" data-search="cs go go cs контра кс кс го го коэс" class="col-md-3 col-xs-4 game-main">
<div class="promo-game-item">
<div class="game-title"></div>
</div>
</div>  

Ответы (1 шт):

Автор решения: Vadim

Цвета поменяй на fadeOut, это для наглядности

const sleep=(ms)=>new Promise((r)=>setTimeout(r, ms));

(async()=>{
    await sleep(2000);
    const symb = 'cs 1.6';
    $('.containerItems > .row').each((i, e)=>{
        const one = $(e).children(`div[data-search*="${symb}"]`);
        if(one.length > 0){
            one.css('background', 'green');
            $(e).children(`div:not([data-search*="${symb}"])`).css('background', 'red');
        }else{
            $(e).children().css('background','darkred'); // $(e).fadeOut();
        }
    });
})();
.game-main{
    background: grey;
    margin-bottom: 3px;
}

.containerItems{
    border: 1px solid black;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<div class='containerItems'>
  <!-- ONE -->
  row 1
  <div class="row">
    <div data-game='cs go' data-search='cs go go cs' class='col-md-3 col-xs-4 game-main'>
      <div class='promo-game-item'>
        <div class='game-title'>
          Title1
        </div>
      </div>
    </div>
    <div data-game='asd' data-search='asd' class='col-md-3 col-xs-4 game-main'>
      <div class='promo-game-item'>
        <div class='game-title'>
          Title2
        </div>
      </div>
    </div>
    <div data-game='zzzz cs' data-search='go go' class='col-md-3 col-xs-4 game-main'>
      <div class='promo-game-item'>
        <div class='game-title'>
          Title3
        </div>
      </div>
    </div>
  </div>
  <!-- TWO -->
  row 2
  <div class="row">
    <div data-game='cs 1.6' data-search='cs' class='col-md-3 col-xs-4 game-main'>
      <div class='promo-game-item'>
        <div class='game-title'>
          Title4
        </div>
      </div>
    </div>
    <div data-game='csze' data-search='cs 1.6' class='col-md-3 col-xs-4 game-main'>
      <div class='promo-game-item'>
        <div class='game-title'>
          Title5
        </div>
      </div>
    </div>
  </div>
</div>

→ Ссылка