Как заставить IE8 уважать .removeClass()?

#jquery #internet-explorer-8

#jquery #internet-explorer-8

Вопрос:

Код, который вызывает у меня головную боль, таков:

 $('#timeline .selected').removeClass('selected');
 

Он просто не будет вести себя должным образом в IE8. Классы удаляются правильно, но каким-то образом элемент по-прежнему имеет тот же стиль, что и стиль с классом ‘selected’ .

P.S. Эти двое тоже не сработают:

 $('#timeline .selected').removeAttr('class');
$('#timeline .selected').removeAttribute('class');
 

Пожалуйста, помогите!

Комментарии:

1. Проверьте, наследует ли ваш элемент аналогичные стили от другого селектора.

2. Нет, в инспекторе он показывает правильные стили, но он не отображается таким образом. Это простая фоновая позиция, и она имеет правильные координаты в инспекторе, но не в окне просмотра.

3. что, если вы добавите другой класс, который стилизует элемент так, как вы хотите?

4. Возможно, было бы неплохо смоделировать проблему в jsfiddle, чтобы мы могли взглянуть на странное поведение.

5. Что ж, супер простой пример в JSFiddle работает… jsfiddle.net/P2zmm — Может быть, мне стоит попробовать реализовать весь модуль в jsfiddle?

Ответ №1:

Обновлено: http://jsfiddle.net/jWvdr/2 /

 $('li').hover( function() {
    $(this).addClass('active');
}, function() {
    $(this).removeClass('active');                
});
 

Кажется, работает нормально:

http://jsfiddle.net/jWvdr/

 $('li.active').click( function() {
    $(this).removeClass('active');
});
 

Какие атрибуты css вызывают у вас проблемы?

Комментарии:

1. Ну, это строка CSS, которая должна управлять состоянием наведения и «активным» классом (черт возьми, не могу отформатировать его как код): #timeline-внутренний раздел article .certificate:hover:before, #timeline-внутренний раздел article.selected .certificate:before { фон-позиция: -232px -59px; }

2. Это просто атрибут, который я меняю, когда элемент имеет «активный» класс: background-position: -232px -59px;

3. Вы используете css-селектор, который не полностью поддерживается IE8. Для :before и content для работы в IE8 должен быть объявлен <!DOCTYPE> . Вам, вероятно, следует пересмотреть свое решение делать это без рискованных селекторов 🙂

4. Посмотрите, не работает ли это для вас в IE8 jsfiddle.net/xyv8x/1 — для меня имеет.. Так что, вероятно, это ваш CSS 🙂

5. Проблема была в элементе :before . IE8 не учитывает изменения в :before, если класс добавляется к основному элементу. Спасибо вам всем!