javascript - jQuery 在两个以上类之间切换

标签 javascript jquery toggle addclass removeclass

我已经发布了有关 jQuery 切换方法的问题 here 但问题是,即使使用迁移插件,它也不起作用。

我想编写一个在五个类(0 -> 1 -> 2 -> 3 -> 4 -> 5)之间切换的脚本。

这是我使用的JS代码部分:

$('div.priority#priority'+id).on('click', function() {
        $(this).removeClass('priority').addClass('priority-low');
    });
    $('div.priority-low#priority'+id).on('click' ,function() {
        $(this).removeClass('priority-low').addClass('priority-medium');
    });
    $('div.priority-medium#priority'+id).on('click', function() {
        $(this).removeClass('priority-medium').addClass('priority-normal');
    });
    $('div.priority-normal#priority'+id).on('click', function() {
        $(this).removeClass('priority-normal').addClass('priority-high');
    });
    $('div.priority-high'+id).on('click', function() {
        $(this).removeClass('priority-high').addClass('priority-emergency');
    });
    $('div.priority-emergency'+id).on('click', function() {
        $(this).removeClass('priority-emergency').addClass('priority-low');
    });

这不是代码的第一个版本 - 我已经尝试过其他一些东西,例如:

    $('div.priority#priority'+id).toggle(function() {
     $(this).attr('class', 'priority-low');
}, function() {
     $(this).attr('class', 'priority-medium');
}, function() {
     ...)

但这次它只在第一个和最后一个元素之间切换。

这是我的项目所在的位置:strasbourgmeetings.org/todo

最佳答案

问题是,当您的代码运行时,您的代码会将处理程序与这些类的元素 Hook 。。当您更改元素上的类时,相同的处理程序仍保持附加状态。

您可以使用单个处理程序,然后在单击发生时检查该元素具有哪个类:

$('div#priority'+id).on('click', function() {
    var $this = $(this);
    if ($this.hasClass('priority')) {
        $this.removeClass('priority').addClass('priority-low');
    }
    else if (this.hasClass('priority-low')) {
        $this.removeClass('priority-low').addClass('priority-medium');
    }
    else /* ...and so on... */
});

您也可以使用 map 来做到这一点:

var nextPriorities = {
    "priority":           "priority-low",
    "priority-low":       "priority-medium",
    //...and so on...
    "priority-emergency": "priority"
};
$('div#priority'+id).on('click', function() {
    var $this = $(this),
        match = /\bpriority(?:-\w+)?\b/.exec(this.className),
        current = match && match[0],
        next = nextPriorities[current];
    if (current) {
        $this.removeClass(current).addClass(next || 'priority');
    }
});

关于javascript - jQuery 在两个以上类之间切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17909879/

相关文章:

JavaScript 单元测试 : How to test a Jquery Submit() in a click function?

javascript - jQuery 条件传递

javascript - Ember 测试访问 promise 不起作用

javascript - 获取 html 元素向用户显示的内容

javascript - 如何更改 keyCode 中的功能

jquery - 如何停止菜单出现在图像和横幅后面,同时将其保持在固定位置?

jquery - 向右滑动子菜单

ios - UITextView UIResponderStandardEditActions 文本格式化切换状态

javascript - 我如何使用 jquery 删除 "Read more"?

jQuery wrapAll 的行为不符合预期