jQuery - Добавить активный класс и удалить активный из другого элемента при нажатии

Я новичок в jQuery, поэтому я сожалею, если это глупый вопрос. Но я просматриваю Stack Overflow, и я могу найти то, что наполовину работает, я просто не могу заставить его полностью работать.

У меня есть 2 вкладки - 1 активен, другой - нет. Как только щелкнуть неактивную вкладку, я хочу, чтобы ей был присвоен класс active и предыдущий активный класс, который нужно удалить. И наоборот, каждый раз, когда нажимается неактивная вкладка.

Любая помощь будет замечательной!

Вот что я сейчас имею: http://jsfiddle.net/zLpe5/

Здесь я попытался добавить и удалить класс:

$(document).ready(function() {
$(".tab").click(function () {
    $(".tab").removeClass("active");
    $(".tab").addClass("active");        
});
});

Если бы кто-нибудь мог помочь с слиянием двух бит скрипта в моей скрипке, это тоже было бы огромной помощью. Поскольку я довольно смущен, как это делается!

Спасибо :)

Ответы

Ответ 1

Попробуй это

$(document).ready(function() {
$(".tab").click(function () {
    $(".tab").removeClass("active");
    // $(".tab").addClass("active"); // instead of this do the below 
    $(this).addClass("active");   
});
});

когда вы используете $(".tab").addClass("active"); , он нацелен на все элементы с именем класса .tab. Вместо этого, когда вы используете this он ищет элемент, который имеет событие, в вашем случае элемент, который нажат.

Надеюсь, это поможет вам.

Ответ 2

Вы можете удалить класс active из всех .tab и использовать $(this) целевой текущий щелкнул .tab:

$(document).ready(function() {
    $(".tab").click(function () {
        $(".tab").removeClass("active");
        $(this).addClass("active");     
    });
});

Ваш код не будет работать, потому что после удаления класса active из всех .tab, вы также добавить класс active ко всему .tab снова. Поэтому вам нужно использовать $(this) вместо $('.tab') чтобы добавить класс active только к .tab anchor

Обновленный скрипт

Ответ 3

Вы удалили активный класс со всех вкладок, но затем снова добавили активный класс ко всем вкладкам. Вы должны только добавить активный класс к текущей вкладке, подобной так: http://jsfiddle.net/QFnRa/

$(".tab").removeClass("active");
$(this).addClass("active");  

Ответ 4

$(document).ready(function() {
    $(".tab").click(function () {
        if(!$(this).hasClass('active'))
        {
            $(".tab.active").removeClass("active");
            $(this).addClass("active");        
        }
    });
});

Ответ 5

Используйте jquery cookie https://github.com/carhartl/jquery-cookie, а затем вы можете быть уверены, что класс останется на странице обновления.

Сохраняет идентификатор элемента clicked в cookie, а затем использует его для добавления класса при обновлении.

        //Get cookie value and set active
        var tab = $.cookie('active');
        $('#' + tab).addClass('active');

        //Set cookie active tab value on click
        //Done this way to preserve after page refresh
        $('.topTab').click(function (event) {
            var clickedTab = event.target.id;
            $.removeCookie('active', { path: '/' });
            $( '.active' ).removeClass( 'active' );
            $.cookie('active', clickedTab, { path: '/' });
        });

Ответ 6

Попробуй это:

$(document).ready(function() {
    $(".tab").click(function () {
        $("this").addClass("active").siblings().removeClass("active");   
    });
});