Удалите все классы, кроме одного

Ну, я знаю, что с некоторыми действиями jQuery мы можем добавить много классов к определенному div:

<div class="cleanstate"></div>

Скажем, что с некоторыми щелчками и другими вещами div получает много классов

<div class="cleanstate bgred paddingleft allcaptions ..."></div>

Итак, как я могу удалить все классы, кроме одного? Единственная идея, которую я придумал, заключается в следующем:

$('#container div.cleanstate').removeClass().addClass('cleanstate');

В то время как removeClass() убивает все классы, div получает прикручивание, но добавление сразу после этого addClass('cleanstate') возвращается к нормальному. Другое решение состоит в том, чтобы поместить атрибут ID с базовыми свойствами CSS, чтобы они не удалялись, что также повышает производительность, но я просто хочу узнать другое решение, чтобы избавиться от всех, кроме ".cleanstate"

Я спрашиваю об этом, потому что в реальном script div страдает от различных изменений классов.

Ответ 1

Вместо того, чтобы делать это за 2 шага, вы можете просто reset получить все значение сразу с помощью attr, перезаписав все значения класса с помощью класса, который вы хотите:

jQuery('#container div.cleanstate').attr('class', 'cleanstate');

Пример: http://jsfiddle.net/jtmKK/1/

Ответ 2

Используйте attr, чтобы напрямую установить атрибут класса в нужное вам значение:

$('#container div.cleanstate').attr('class','cleanstate');

Ответ 3

С обычным старым JavaScript, а не с JQuery:

document.getElementById("container").className = "cleanstate";

Ответ 4

Иногда вам нужно сохранить некоторые классы из-за анимации CSS, потому что, как только вы удалите все классы, анимация может не работать. Вместо этого вы можете сохранить некоторые классы и удалить остальные следующим образом:

$('#container div.cleanstate').removeClass('removethis removethat').addClass('cleanstate');

Ответ 5

чтобы отвечать на запросы, и для и для полноты вы также можете использовать querySelector с ванилью

document.querySelector('#container div.cleanstate').className = "cleanstate";

Ответ 6

Что делать, если вы хотите сохранить один или несколько классов и хотите использовать классы, кроме них. Это решение не сработает, если вы не захотите удалить все классы, чтобы добавить этот класс. Использование attr и removeClass() сбрасывает все классы в первом экземпляре, а затем снова присоединяет этот перкулярный класс. Если вы снова используете анимацию в классах, которые являются reset, это не сработает.

Если вы хотите просто удалить все классы, кроме некоторого класса, то это для вас. Мое решение для: removeAllExceptThese

Array.prototype.diff = function(a) {
            return this.filter(function(i) {return a.indexOf(i) < 0;});
        };
$.fn.removeClassesExceptThese = function(classList) { 
/* pass mutliple class name in array like ["first", "second"] */
            var $elem = $(this);

            if($elem.length > 0) {
                var existingClassList = $elem.attr("class").split(' ');
                var classListToRemove = existingClassList.diff(classList);
                $elem
                    .removeClass(classListToRemove.join(" "))
                    .addClass(classList.join(" "));
            }
            return $elem;
        };

Это не будет reset все классы, он удалит только необходимые.
Мне нужно было это в моем проекте, где мне нужно было удалить только не соответствующие классы.

Вы можете использовать его $(".third").removeClassesExceptThese(["first", "second"]);