jQuery - удалить все классы элементов, начинающиеся с определенного шаблона

0

Мне нужно удалить все классы из начала элемента с помощью "layout-"

Я попробую:

var regex = new RegExp('\b' + 'layout-' + '.*?\b', 'g');
$(el)[0].className = $(el)[0].className.replace(regex, '');

но это не сработает. Решение может быть в jQuery. Есть идеи?

  • 0
    Вы хотите удалить все классы или только те классы, которые начинаются с "layout-"? Например, class="class1 layout-something" - это должно сохранить class1 ?
  • 0
    возможный дубликат подстановочного знака JQuery removeClass
Теги:
class
tags

2 ответа

5
Лучший ответ

RegExp, который вы разместили в вопросе, не работает, потому что \b не экранируется как \\b. Следовательно, фактический RegExp становится /layout-.*?/g вместо /\blayout-.*?\b/g. Выполнение приведенного ниже изменения будет работать.

var regex = new RegExp('\\b' + 'layout-' + '.+?\\b', 'g');

Вы также можете попробовать, как показано ниже. Это удаляет все классы, похожие на layout-X

var regex = /(\s)*(layout-.*?)(?=\s)/g; 
$('#test')[0].className = $('#test')[0].className.replace(regex, '');

Демо-скрипт

Вход: class=sample layout-10 layout-9 sample1 slayout

Выход: class=sample sample1 slayout

RegExp Разъяснение:

\s - любой символ пробела

(layout-.*?) - Захват всех значений, таких как layout- X, где X может быть любым символом любое количество раз

(?=\s) - Посмотрите вперед до следующего символа пробела (что означает до конца слова)


Как указано musefan в комментариях var regex =/\blayout-.+?\b/g; также будет выполнять эту работу.

  • 1
    Как раз собирался опубликовать ответ, предполагая, что это похоже на проблему с определением регулярного выражения. Это регулярное выражение также работает: /\blayout-.+?\b/g
  • 0
    Верно, правда. Просто сейчас перепроверил после того, как отправил. Кроме того, тот, который я опубликовал, должен быть улучшен до (\s)* изначально. Текущий в моем ответе не заменит layout-X если это первый класс. Исправляя это сейчас.
Показать ещё 1 комментарий
1
$("[class^='layout-']").removeAttr('class');

ссылка attribute-starts-with-selector

removeAttr

  • 0
    Я не уверен, что ОП хочет удалить весь атрибут класса, я попросил разъяснений, но там, кажется, попытка предложить, что они просто хотят удалить классы layout-
  • 0
    Мне нужно удалить все классы из элементов, начинающихся с 'layout-', - сказал оп, и я должен ответить на это, спасибо за фокус @musefan
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню