$(document).on('click', function(e) {
if (!$(e.target).closest(".filter").length) {
$('.filter-block').hide();
}
e.stopPropagation();
});<div class="filter" data-id="1">
<div class="filter-block" data-target="1">
<div class="filter" data-id="2">
<div class="filter-block" data-target="2">
<div class="filter" data-id="3">
<div class="filter-block" data-target="3">$(document).on('click', function(e) {
let $f = $(e.target).closest(".filter");
if ($f.length) {
let id = $f.data('id');
$('.filter-block:not([data-target="'+id+'"])').hide();
}
e.stopPropagation();
}); let items = document.querySelectorAll("[class^='filter-block']")
let items.forEeach(item => {
// ...
});[class^='filter-block'] означает, что вы будете делать выборку по всем элементам, у которых значение указанного аттрибута (В нашем случае, мы указали аттрибут class) будет начинаться (Это делается при помощи такой конструкции как ^= ) с указанного значения (Мы указали filter-block), после которого могут следовать другие символы (Т.е. filter-block2, filter-block-filter-block-filter-block, filter-block-123, filter-blockkkkkkkkkkkkkkkkk и так далее, это всё будет проходить через выборку, т.к. имеет общее начало filter-block) $(document).on('click', function(e) {
if (!$(e.target).closest(".filter").length) {
let filterNum = $(e.target).data('num');
$('.filter-block' + filterNum).hide();
}
e.stopPropagation();
});