Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   removeClass() по маске (https://javascript.ru/forum/jquery/10961-removeclass-po-maske.html)

daykkin 30.07.2010 23:20

removeClass() по маске
 
Подскажите уважаемые как мне имея 10 классов в блоке div удалить только те, которые начинаются с символов скажем "optical" ? Причем это все нужно делать в функции click имея уже готовый div блок в $(this). Гугл и официальная api документация - не помогли. Зашел в тупик, уповаю на Вашу помощь.

sysya 31.07.2010 09:11

двигайте в сторону регулярных выражений http://javascript.ru/search/node/регулярные+выражения
В вашем случае пробуйте играться с методом test
хотя removeClass() сам должен удалять нужный класс... или я что то недогоняю наверна...

daykkin 31.07.2010 11:31

Спасибо за наводку
 
Начал копать и нашел решение этого вопроса в таком виде:
$(this)[0].className = $(this)[0].className.replace(/\bтексткласса.*\b/g, '');

Но теперь зашел в тупик в другом, не мение важном вопросе. Мне все в том же событии click все с теми же div блоком в $(this) нужно провернуть следующее - в одном месте события я должен провести проверку на наличие класса по маске и если ни одного класса нет, то я должен удалить определенный класс.

Например, у меня есть блок div c классами <div class="class-1 class-2 onclick-1 onclick-2 onclick-3 onclicks">

Я должен удалить класс "onclicks", только при условии что нет ни одного класса по маске "onclick-".

Как быть?

exec 31.07.2010 12:07

if ( !$(this).is('[class^="onclick-"]') ) $(this).removeClass('onclicks');

daykkin 31.07.2010 12:19

К сожалению не работает, версия jquery 1.2.6

x-yuri 31.07.2010 14:24

во-первых, работает даже в 1.2.6
во-вторых, расскажи подробнее про эти классы

Цитата:

Сообщение от daykkin
Начал копать и нашел решение этого вопроса в таком виде:
$(this)[0].className = $(this)[0].className.replace(/\bтексткласса.*\b/g, '');

и что, работает?

daykkin 31.07.2010 15:40

эм.. да.
во первых работает, во вторых решение с поиском - не работает.
уже нашел рабочее решение в виде:
if (!$(this).attr('class').match(/onclick-\-.+?\b/))

sysya 31.07.2010 15:49

Цитата:

if ( !$(this).is('[class^="onclick-"]') ) $(this).removeClass('onclicks');
Цитата:

К сожалению не работает, версия jquery 1.2.6
Не работает потому что всю строку проверяет с начала. Ковыряйте метод test
$(this).attr('class').test('onclick-');
так думаю сработает

daykkin 31.07.2010 16:20

И так к сожалению не работает, но выше я уже написал рабочий вариант. Правда с использованием RegEx.

tenshi 01.08.2010 01:28

зачем такие сложности?


Часовой пояс GMT +3, время: 23:12.