Спасибо. Очень близко... Попробовал на такой верстке:
<div class="parent"> <div class="one">one</div> <div class="one">two</div> </div> <div class="parent"> <div class="one">one</div> <div class="one">two</div> </div> <span class="disabled">span</span> disabled убирается если во всех элементах one есть класс active. А нужно, чтобы activ был только в одном из элементов one? в каждом parent. |
javascript some and every
Цитата:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>javascript some and every</title> </head> <body> <div class="parent"> <div class="one">one</div> <div class="one">one</div> </div> <div class="parent"> <div class="one">one</div> <div class="one">one</div> </div> <span class="disabled">span</span> <script> (function(span, hook, target, parent) { var sp = document.querySelector('.'+span); var tg = document.querySelectorAll('.'+parent); document.addEventListener('click', function(e) { if (e.target.classList.contains(target)) { e.target.classList.toggle(hook); var qf = [].every.call(tg, function(elem) { return [].some.call(elem.children, function(el) { return el.classList.contains(hook); }); }); if (qf) sp.classList.remove(span); } }); })('disabled', 'active', 'one', 'parent'); </script> </body> </html> |
Круто! Прошу прощения, что еще раз беспокою. Еще одна проблема. В разметке есть еще одна сущность. Конечная верстка выглядит так:
<div class="parent"> <div class="one">one</div> <div class="one">one</div> </div> <div class="parent"> <div class="one">one</div> <div class="one">one</div> </div> <div class="parent"> <input type="checkbox" id="spoiler"> <label for="spoiler">Выберите дату</label> </div> <span class="disabled">span</span> Для удаления disabled нужно произвести проверку, есть ли в parent label, и если есть, то label должен тоже иметь класс active, если label отсутствует, значит он не влияет на span. Спасибо заранее. |
Кроме того если в контейнере есть изображение <div class="one">img</div>, то скрипт не работает.
|
Цитата:
Цитата:
if (e.target.classList.contains(target) || e.target.closest('.'+target)) { |
Часовой пояс GMT +3, время: 18:41. |