Как скрывать блок если нет определенного класса, а при появлении класса показать?
Есть код главный контейнер .rew_serial. Если в этом контейнере нет класса .rew_serial_cont, то скрывать блок .rew_serial, а если есть, то показывать. Подскажите, как это реализовать в JS или CSS ?
<div class="rew_serial">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 1 cерия</div>
</div>
</div>
Ответы (2 шт):
На JS надёжно и универсально. Если изменением классов и DOM управляете Вы, то после каждого изменения, достаточно запускать следующую функцию:
document.querySelectorAll('.rew_serial').forEach(el => {
el.style.display = (!el.querySelector('.rew_serial_cont')) ? 'none' : '';
});
.red { background: #f008 } .blue { background: #00f8 } .green { background: #0908 }
<div class="rew_serial red">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 1 cерия</div>
</div>
</div>
<div class="rew_serial blue">
<div class="not_rew_serial_cont"><!-- Другое имя класса или его отсутствие -->
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 2 cерия</div>
</div>
</div>
<div class="rew_serial green">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 3 cерия</div>
</div>
</div>
Если же структурой и атрибутами управляет сторонний скрипт, то не обойтись без наблюдателя, который будет запускать функцию при обнаружении изменений:
// Родительский элемент
const target = document.querySelector('.parent-rew_serial');
// За какими изменениями наблюдать
const config = {
attributeFilter: ['class'],
attributes: true,
subtree: true
};
// Функция скрытия/показа
function fShowHide() {
document.querySelectorAll('.rew_serial').forEach(el => {
el.style.display = (!el.querySelector('.rew_serial_cont')) ? 'none' : '';
});
}
fShowHide();
// Экземпляр наблюдателя с указанной функцией
const observer = new MutationObserver(fShowHide);
// Навешивание наблюдателя
observer.observe(target, config);
.red { background: #f008 } .blue { background: #00f8 } .green { background: #0908 }
<div class="parent-rew_serial">
<div class="rew_serial red">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 1 cерия</div>
</div>
</div>
<div class="rew_serial blue">
<div class="not_rew_serial_cont"><!-- Другое имя класса или его отсутствие -->
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 2 cерия</div>
</div>
</div>
<div class="rew_serial green">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 3 cерия</div>
</div>
</div>
</div>
В CSS воспользуйтесь псевдоклассом :has() (только обратите внимание на поддержку в браузерах):
.red { background: #f008 }
.blue { background: #00f8 }
.green { background: #0908 }
.rew_serial:has(> :not(.rew_serial_cont)) {
display: none;
}
<div class="rew_serial red">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 1 cерия</div>
</div>
</div>
<div class="rew_serial blue">
<div class="not_rew_serial_cont"><!-- Другое имя класса или его отсутствие -->
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 2 cерия</div>
</div>
</div>
<div class="rew_serial green">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 3 cерия</div>
</div>
</div>
Меня опередили и сделали красивее, но я добавлю свои пол копеек, Так как я тоже новенький и для меня это челендж) И у меня Js код не форматируется тут почему то, не выставляется как надо...
const rew = document.querySelector('.rew_serial').querySelectorAll('.rew_serial_cont');
const rew_ser = document.querySelector('.rew_serial');
if(rew.length > 0){
rew_ser.style.display = 'none';
}
.rew_serial {
width: 200px;
height: 150px;
background: black;
}
<div class="rew_serial" id="rew">
<div class="rew_serial_cont">
<div class="rew_serial_ing">
<a href="#">
<img class="con_img_bord" src="" alt="название">
</a>
</div>
<div class="rew_serial_title"><a href="#">Название</a></div>
<div class="rew_serial_serii">1 cезон, 1 cерия</div>
</div>