jQuery removeClass работает только с реальным именем класса, а не с var - PullRequest
1 голос
/ 31 января 2012

Я создал страницу, чтобы поиграться с 960 Grid System, узнать о размещении div. На странице есть до четырех дел. Когда из выпадающего списка выбирается новый размер сетки, значение вытягивания или толчка, мне нужно удалить текущий класс, то есть grid_8, pull_5 или push_4, и добавить новый выбранный класс.

function alter_grid1(new_class_name){

   var old = document.getElementById('grid1');
   var classes = old.className.split(' ');
   var old_class_name = 'cessna';
   $.each(classes, function(){

        if(old_class_name == 'cessna' || old_class_name == null){
          old_class_name = this.match('/grid_1|grid_2|grid_3|grid_4|grid_5|grid_6|grid_7|grid_8|grid_9|grid_10|grid_11|grid_12|grid_13|grid_14|grid_15|grid_16|grid_17/');
       }
   });
   $(old).removeClass('grid_1 grid_2 grid_3 grid_4 grid_5 grid_6 grid_7 grid_8 grid_9 grid_10 grid_11 grid_12 grid_13 grid_14 grid_15 grid_16').addClass(new_class_name);
   console.log('Old grid1 class name is ' + old_class_name + ' and New grid1 class name is ' + new_class_name);
}

Я могу использовать addClass(new_class_name); без проблем.

Я могу использовать use removeClass('grid_8'); без проблем (grid_8 - фактическое имя класса)

Когда я использую removeClass(old_class_name);, это просто не работает. Нет сообщения об ошибке, ничего в firebug, просто не работает.

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

 $(old).removeClass('grid_1 grid_2 grid_3 grid_4 grid_5 grid_6 grid_7 grid_8 grid_9 grid_10 grid_11 grid_12 grid_13 grid_14 grid_15 grid_16').addClass(new_class_name);

Это единственный способ заставить его работать. Конечно, это работает, но, похоже, я либо что-то упускаю, либо делаю что-то не так. Вы можете увидеть, что я пытаюсь сделать здесь , если это поможет. Я просто не понимаю, как добавить класс с помощью var, но не удалить его одним и тем же способом.

1 Ответ

2 голосов
/ 31 января 2012

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

old_class_name = this.match(/grid_1|grid_2|grid_3|grid_4|grid_5|grid_6|grid_7|grid_8|grid_9|grid_10|grid_11|grid_12|grid_13|grid_14|grid_15|grid_16|grid_17/);

или, может быть, даже

old_class_name = this.match(/grid_[0-9]+/);
...