Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Как выбрать div, если в нем все чебоксы пустые? (https://javascript.ru/forum/dom-window/85754-kak-vybrat-div-esli-v-nem-vse-cheboksy-pustye.html)

sovsem-nub 12.02.2024 10:33

Как выбрать div, если в нем все чебоксы пустые?
 
есть такой html
<div class="parametrs" n="Figures" tt="1">

 <div class="parametr-размер"><b>размер</b>

<label><input type="checkbox"><a>Большой</a></label>     
<label><input type="checkbox"><a>Маленький</a></label>     
<label><input type="checkbox"><a>Средний</a></label>     

</div>

 <div class="parametr-форма-hide"><b>форма</b>

<label><input type="checkbox"><a>квадрат</a></label>     
<label><input type="checkbox"><a>круг</a></label>     
<label><input type="checkbox"><a>треугольник</a></label>     

</div>

 <div class="parametr-цвет-hide"><b>цвет</b>

<label><input type="checkbox"><a>зеленый</a></label>     
<label><input type="checkbox"><a>красный</a></label>     
<label><input type="checkbox"><a>синий</a></label>     

</div>

</div>



как при помощи CSS стилей или JS выбрать те блоки <div class="parametr- в которых в данный момент не стот ни одной галочки?

рони 12.02.2024 11:13

sovsem-nub,
<!DOCTYPE HTML>
<html>
<head>
    <title>Untitled</title>
    <style type="text/css">
        .er {
            border: 4px red solid;
        }
    </style>
</head>
<body>
    <div class="parametrs" n="Figures" tt="1">
        <div class="parametr-размер"><b>размер</b>
            <label><input type="checkbox"><a>Большой</a></label>
            <label><input type="checkbox"><a>Маленький</a></label>
            <label><input type="checkbox"><a>Средний</a></label>
        </div>
        <div class="parametr-форма-hide"><b>форма</b>
            <label><input type="checkbox"><a>квадрат</a></label>
            <label><input type="checkbox"><a>круг</a></label>
            <label><input type="checkbox"><a>треугольник</a></label>
        </div>
        <div class="parametr-цвет-hide"><b>цвет</b>
            <label><input type="checkbox"><a>зеленый</a></label>
            <label><input type="checkbox"><a>красный</a></label>
            <label><input type="checkbox"><a>синий</a></label>
        </div>
    </div>
    <script>
        let box = document.querySelector('.parametrs');
        const er = () => {
            document.querySelectorAll('.parametrs > div').forEach(div => div.classList.toggle('er', !div.querySelector(':checked')))
        };
        er();
        box.addEventListener('change', er)
    </script>
</body>
</html>

voraa 12.02.2024 11:17

function selectNotCheckedDivs (container) {
	// Выбираем все дочерние div в контейнере
	const divs = [...container.querySelectorAll(':scope>div')];
	// Из них выбираем те, которые вообще имеют <input type="checkbox">
	const divsWithCheck = divs.filter(div => div.querySelector('input[type="checkbox"]'));
	// из ниx выбираем те, которые не имеют отмеченных
	const divsNotCheck = divsWithCheck.(div => ! div.querySelector('input[type="checkbox"]:checked'));
	return divsNotCheck;
}

const notCheckedDivs = selectNotCheckedDivs(document.querySelector('.parametrs'))

ruslan_mart 12.02.2024 18:12

voraa, ":scope" с двоеточием нужно :)

voraa 12.02.2024 18:21

ruslan_mart,
Точняк. Поправил.


Часовой пояс GMT +3, время: 18:26.