jasonOk
@jasonOk
Легче болтать, чем код писать

Насколько правилен код? Можно ли упростить?

Пожалуйста, просмотрите пример https://jsfiddle.net/vobbohxj/
Возможно ли упростить код / сделать его более быстрым?

Принцип такой: когда активны (имеют класс "is_active") 4 дива, то пятый, главный ("#all-tags"), тоже становится активным. Если я убираю класс у какого-либо блока, то "#all-tags" тоже теряет класс "is_active". Если я помечаю все четыре дива, то пятый, соответственно, так же сам "загорается".
$("#all-tags").click(function() {
    if ($(this).hasClass("is_active")) {
        $(".tags_cloud div").each(function() {
            $(this).removeClass("is_active");
        });
    } else {
        $(this).addClass("is_active");
        $(".tags_cloud div").each(function() {
            $(this).addClass("is_active");
        });
    }
});

$(".tags_cloud div").click(function() {
    !$(this).is("#all-tags") ? $(this).toggleClass("is_active") : true;
    var c = 0;
    $(".tags_cloud div").each(function() {
        if ($(this).hasClass("is_active") && !$(this).is("#all-tags")) {
            // some my code
        } else if (!$(this).is("#all-tags")) {
            $("#all-tags").removeClass("is_active");
            c = 1;
        }
        c == 0 ? $("#all-tags").addClass("is_active") : true;
    })
});

Не уверен, что использование .each() достаточно правильно...
Моё решение работает как надо, но мне, конечно же, требуется самое правильное и быстрое.

Одно из решений: https://jsfiddle.net/mu85sf4m/
  • Вопрос задан
  • 774 просмотра
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Достаточно $(".tags_cloud div").removeClass("is_active");
Определить, сколько div'ов имеют класс is_active можно $(".is_active").not("#all-tags").length
Ответ написан
Комментировать
nepritimov_m
@nepritimov_m
Frontend dev.
1) Кешируйте элементы. Зачем каждый раз искать элемент в DOM, когда это можно сделать один раз, а потом использовать просто переменную.
2) Используйте строгое равенство ===
3) Когда в выборке несколько элементов и нужно ко всем применить одно и то же действие, jQuery перебирает поэлементно выборку и применяет действие к каждому элементу.
Как указано выше, достаточно использовать $(".tags_cloud div").removeClass("is_active");
Просто решил объяснить, почему этого достаточно.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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