Верно ли, что элементы верхнего уровня должны управлять нижними и не наоборот?

Возник спор с коллегой, он утверждает, что элементы верхнего уровня в DOM дереве должны управлять нижними и никак иначе, т.е. хождение вверх по дереву - плохая практика. Например, плохая практика, по его мнению:
$(document).on('click', 'button', function() {
    $(this).closest('.wrapper').addClass('selected');
});


=== UPD ===

Вариант решения данной задачи коллегой:
$('.wrapper').each(function() {
    var item = $(this);
    item.find('button').click(function() {
        item.addClass('selected'); 
    });
});

==========

Ребят, ну ведь двигатель управляет автомобилем, а человек - компанией, а не наоборот. Ваше мнение по этому вопросу?
  • Вопрос задан
  • 2405 просмотров
Пригласить эксперта
Ответы на вопрос 6
Rad1calDreamer
@Rad1calDreamer
Вместо этого, как он утверждает, мы должны отслеживать события внешних элементов и менять внутренние.

бред. (с) Валерий Карпин
Ответ написан
Комментировать
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
мы должны отслеживать события внешних элементов и менять внутренние.

Если ваш коллега сможет решить задачу, которую хорошо решает приведенный вами код своим методом - пусть продемонстрирует. Даже любопытно стало.
Ответ написан
@vasIvas
Если говорить о ооп и программировании, то Ваш собеседник прав.
Верхний уровень на прямую должен менять нижние, а те в свою очередь
должны слать события, на которые вышестоящие могут среагировать, а могут и нет.

И я не знаю, кто создал jQuery, но могу сказать только одно,
не один разработчик html -> css -> js не знает и не понимает полностью принципы и основы программирования.
Могу добавить от себя что то, что в разработке ПО и игростроении считается нормой, в web считается глупым и нелепым и обосновывается только тем, что "я так не делаю". Все нововведения которые появляются в последние время делают программисты java -> c...
Что говорить, если даже mvc для сайтов не такое, как для онлайн игр.
Ответ написан
@Tashiro
попробуйте на CSS изменить стиль родителя...
Ответ написан
Есть ряд задач, которые не возможно решить с верху - вниз. Вы же навели сразу и контр-пример :) изменение родителя, в связи с действием в потомке. Мне кажется, что еще и потому, что не все можно в css, появилась такая сильная библиотека для манипуляции DOM как jQuery. И пока в ней есть методы на подобие .closest() не стоит заморачиваться по поводу "православности". Тем более если иначе все равно, либо нельзя, либо можно, но намного хлопотнее.
Ответ написан
Комментировать
@YemSalat
Православный метод - вешать листенер на родителя и по таргету определять потомка.
При этом jQuery сохраняет элемент который вызвал событие в переменную delegateTarget обьекта event.

Перефразирую:
$('.wrapper').on('click', 'button', function(event) {    
    $(event.delegateTarget).addClass('selected');
});


Обоснование: Производительность. Зачем что-то искать (closest/find) если и так все есть.

Так что у вас обоих неправильно :)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы