我创建了自己的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);
});
});
答案 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"));
});
但是,如果添加或删除颜色,这可能会变得有点难以维护。更好的模式是在选择选项或单击颜色时调用单个函数在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
答案 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"));
});
});