removeClass删除不正确的类

时间:2013-11-29 17:43:05

标签: javascript jquery

http://jsfiddle.net/a86C3/

    var classNames = ['mute', 'on', 'off', 'none'];
    $('.state').click(function () {

        $(this).toggleClass(function (i, className) {
            var index = (classNames.indexOf(className) + 1) % classNames.length;

            alert(className);
            $(this).removeClass(className);

            return classNames[index];
        });
    });

应该保留.state。为什么最初要删除这个类?

4 个答案:

答案 0 :(得分:0)

  

为什么最初要移除此类?

让我们一步一步地完成它:

  1. className"mute state"

  2. classNames.indexOf("mute state")-1,因此index0

  3. $(this).removeClass("mute state");删除了mutestate

  4. 返回classNames[0],即mute。由于您刚刚删除了mutetoggleClass会将其重新添加回来。

  5. 最终结果是删除了state


    您可能不想在removeClass内调用toggleClass,而className不是单个类,它是一个包含所有类的字符串。

答案 1 :(得分:0)

您可以尝试这样的事情:

    var classNames = ['mute', 'on', 'off', 'none'];
    var counter = -1;
    var newClass, oldClass;
    $('.state').click(function () {

        $(this).toggleClass(function (i, className) {
            counter++;

            oldClass = newClass || classNames[counter % classNames.length];
            newClass = classNames[counter % classNames.length];

            $(this).removeClass(oldClass);

            return classNames[counter % classNames.length];
        });
    });

你是说上面的东西吗? http://jsfiddle.net/Dieterg/a86C3/1/

答案 2 :(得分:0)

我将如何做到这一点:

var classNames = ['mute', 'on', 'off', 'none'];
$('.state').on('click', function () {
    var k = 0, self = this;

    $.each(classNames, function (i, klass) {
        if ($(self).hasClass(klass)) k = i;
    });

    $(this).removeClass(classNames[k]).addClass(classNames[k==(classNames.length-1) ? 1 : 1+k]);
});

FIDDLE

答案 3 :(得分:0)

这是我的猜测:

$(this).toggleClass(function (i, className) {       
    className = className.match(new RegExp(
        '(?:^|\\s)(' + classNames.join('|') + ')(?=\\s|$)'
    ))[1];
    $(this).removeClass(className);
    return classNames[
        (classNames.indexOf(className) + 1) % classNames.length
    ];
});

演示:http://jsfiddle.net/wared/QZ8Kh/


奖金:

var classNames = ['mute', 'on', 'off', 'none'];
$('.state').click(function () {
    var className = $(this).attr('class').match(new RegExp(
        '(?:^|\\s)(' + classNames.join('|') + ')(?=\\s|$)'
    ))[1];
    $(this).toggleClass(className + ' ' + classNames[
        (classNames.indexOf(className) + 1) % classNames.length
    ]);
});