Есть ли простой способ удалить все классы, соответствующие, например,
color-*
так что если у меня есть элемент:
<div id="hello" class="color-red color-brown foo bar"></div>
после удаления было бы
<div id="hello" class="foo bar"></div>
Спасибо!
Ответы:
Функция removeClass принимает аргумент функции начиная с jQuery 1.4 .
Живой пример: http://jsfiddle.net/xa9xS/1409/
источник
classes = ( value || "" ).match( rnotwhite ) || [];
sport-
,nav-
аcolor-
?*-color
?(color-|sport-|nav-)
. Это будет соответствоватьcolor-
, илиsport-
, илиnav-
. Итак, ответ выше стал бы/(^|\s)(color-|sport-|nav-)\S+/g
.источник
c is undefined
)? По крайней мере, когда я попробовал это ниже в моем плагине на этой странице,$('a').stripClass('post', 1)
выкинуло «TypeError: Невозможно вызвать метод« замена »из неопределенного»$('div[class]')
должен возвращать только элементы сclass
независимо от того, имеют они значение или нет. сценарии тестирования: jsfiddle.net/drzaus/m83mv.removeProp('class')
или.className=undefined
фильтр[class]
все еще что-то возвращает, они простоundefined
. Технически, у него все еще есть класс (в отличие от него.removeAttr('class')
, поэтому он нарушает вашу функцию, но не мой вариант. Jsfiddle.net/drzaus/m83mv/4return c && c.replace(/\bcolor-\S+/g, '');
Я написал плагин, который делает это под названием alterClass - Удалить классы элементов с сопоставлением по шаблону. При желании добавить классы: https://gist.github.com/1517285
источник
Twitter Boostrap
классы, подобные этому:$(".search div").children('div').alterClass('span* row-fluid');
Я обобщил это в плагин Jquery, который принимает регулярное выражение в качестве аргумента.
Кофе:
Javascript:
Таким образом, для этого случая использование будет (как Coffee, так и Javascript):
Обратите внимание, что я использую
Array.filter
функцию, которой нет в IE <9. Вместо этого вы можете использовать функцию фильтра Underscore или Google для полифилла, такого как WTFPL .источник
Если вы хотите использовать его в других местах, я предлагаю вам расширение. Этот работает хорошо для меня.
Применение:
источник
мы можем получить все классы с помощью
.attr("class")
Array, и loop & filter:демо: http://jsfiddle.net/L2A27/1/
источник
var prefix='color';
и изменено ...if (classArr[i].substr(0, prefix.length) != prefix)
Подобно @ tremby - х ответа , вот @ Коби в ответ как плагин , который будет соответствовать либо префиксы или суффиксы.
btn-mini
и ,btn-danger
но неbtn
когдаstripClass("btn-")
.horsebtn
и ,cowbtn
но неbtn-mini
или ,btn
когдаstripClass('btn', 1)
Код:
https://gist.github.com/zaus/6734731
источник
endOrBegin
должно быть. Это не говорит само за себя. Что сложного в написании регулярных выражений?/^match-at-start/
и/match-at-end$/
известны каждому разработчику JS. Но каждому свое.addClass
,removeClass
иtoggleClass
, которая , как известно каждому разработчику JQuery. Что сложного в чтении документации? ;)Для плагина jQuery попробуйте это
или это
источник
На основе ARS81 «s ответа (что соответствует только именам классов , начиная с), вот более гибким вариантом. Также
hasClass()
версия регулярного выражения.Применение:
$('.selector').removeClassRegex('\\S*-foo[0-9]+')
источник
Это эффективно удалит все имена классов, которые начинаются с атрибута
prefix
узлаclass
. Другие ответы не поддерживают элементы SVG (на момент написания этого), но это решение:источник
RegExp
объект один раз из каждого обратного вызова?У меня возникла та же проблема, и я пришел к следующему, в котором используется метод _.filter подчеркивания. Как только я обнаружил, что removeClass берет функцию и предоставляет вам список имен классов, было легко превратить это в массив и отфильтровать имя класса, чтобы вернуться к методу removeClass.
источник
Вы также можете сделать это с помощью обычного JavaScript, используя Element.classList . Нет необходимости использовать регулярное выражение:
function removeColorClasses(element) { for (let className of Array.from(element.classList)) if (className.startsWith("color-")) element.classList.remove(className); }
Примечание: обратите внимание, что мы создаем
Array
копиюclassList
перед запуском, это важно, такclassList
как это живоеDomTokenList
обновление, которое будет обновляться по мере удаления классов.источник
Универсальная функция, которая удаляет любой класс, начинающийся с
begin
:http://jsfiddle.net/xa9xS/2900/
источник
Вы также можете использовать
className
свойство объекта DOM элемента:источник
Разделение регулярных выражений на границе слова
\b
- не лучшее решение для этого:или как JQuery Mixin:
источник
если у вас есть более одного элемента с именем класса 'example', чтобы удалить классы 'color-' во всех из них, вы можете сделать это: [using jquery]
если вы не введете [a-z1-9 -] * в свое регулярное выражение, оно не удалит классы, в именах которых есть число или несколько символов '-'.
источник
Если вам просто нужно удалить последний установленный цвет, вам может подойти следующее.
В моей ситуации мне нужно было добавить класс цвета к тегу body в событии click и удалить последний цвет, который был установлен. В этом случае вы сохраняете текущий цвет, а затем ищите тег данных, чтобы удалить последний установленный цвет.
Код:
Может быть, это не совсем то, что вам нужно, но для меня это было, и это был первый SO вопрос, на который я посмотрел, поэтому подумал, что поделюсь своим решением, если оно кому-нибудь поможет.
источник
Альтернативный способ решения этой проблемы - использовать атрибуты данных, которые по своей природе уникальны.
Вы бы установить цвет элемента, как:
$el.attr('data-color', 'red');
И вы бы сделали это в CSS как:
[data-color="red"]{ color: tomato; }
Это исключает необходимость использования классов, что имеет побочный эффект необходимости удаления старых классов.
источник