如何使用addClass& amp; removeClass?

时间:2015-12-19 18:11:22

标签: jquery css switchers

我创建了自己的Switcher jQuery,我想在点击其他颜色时删除类,例如:我有" blue" body标签上的类,当有人点击红色时,应删除蓝色类并将其替换为红色等等。

代码:

$("body").addClass("wide light blue");

// Switcher jQuery Plugin
$(".switcher-toggle").click(function() {
    $("#switcher").toggleClass("open");
});

// Theme Layout Switch
$(".layout").change(function() {
    var layout = $(".layout").val();
    $(".wrapper").css("width",layout);
});

// Theme Skins Switch
$(".skins").change(function() {
    var skin = $(".skins").val();
    $("body").toggleClass(skin);
});

// Theme Colors Switch
$(".colors span").each(function() {
     var data_color = $(this).attr("data-color");
     $(this).click(function() {
         $("body").toggleClass(data_color);
     });
});

演示: https://jsfiddle.net/uikithemes/p18cqa5s/

2 个答案:

答案 0 :(得分:2)

首先,请注意each()循环是多余的,因为您可以直接在点击处理程序中访问data-color属性。

其次,为了达到您的要求,您可以在使用removeClass添加新类之前,使用addClass提供要删除的所有类的空格分隔列表。试试这个:

$(".colors span").click(function() {
    $("body")
        .removeClass('blue red green orange carrot violet pink gold')
        .addClass($(this).data("color"));
});

Updated fiddle

但是,如果添加或删除颜色,这可能会变得有点难以维护。更好的模式是在选择选项或单击颜色时调用单个函数在body元素上设置类。试试这个:

$(".skins, .layout").change(applyClasses);
$(".colors span").click(function() {
    $(this).addClass('active').siblings().removeClass('active');
    applyClasses();
});

function applyClasses() {
    var classes = [
        $(".skins").val(),
        $(".layout").val(),
        $(".colors span.active").data('color')
    ];

    $('body').removeClass().addClass(classes.join(' '));
}

applyClasses(); // on load

Updated fiddle

答案 1 :(得分:1)

将所有data_color添加到数组中,然后单击颜色从主体中删除阵列中的所有类。之后添加如下的新类。

var data_color= [];
// Theme Colors Switch
$(".colors span").each(function() {
     data_color.push($(this).attr("data-color"));
     $(this).click(function() {
         $("body").removeClass(data_color.join(' ')).addClass($(this).attr("data-color"));
     });
}); 

更新小提琴:https://jsfiddle.net/p18cqa5s/5/