Как я могу убедить Firefox перерисовать псевдоэлементы CSS?

У меня возникают проблемы с тем, чтобы Firefox обновлял веб-страницу, когда ее класс изменяется динамически.

Я использую HTML-элемент table. Когда пользователь щелкает ячейку в заголовке таблицы, мой сценарий переключает класс между sorted_asc и sorted_des. У меня есть псевдоэлемент, который добавляет глиф стрелки (указывающий вверх или вниз) в зависимости от того, к какому классу сейчас принадлежит ячейка.

.thead .tr .sorted_asc .cell:after {
    content: ' \25B2';
}

Проблема в том, что когда вы щелкаете заголовок ячейки второй раз, страница не обновляет стрелку ... до тех пор, пока пользователь не отодвинется от элемента. Я думаю, что это ошибка, поскольку он отлично работает в Safari, и поскольку я не вижу тегов :hover в моем CSS или других записях, которые могут мешать.

Кто-нибудь видел это раньше или знает, как обойти проблему?

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
3
0
3 157
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Это немного глупо, но, поскольку вы все равно используете javascript, попробуйте это после изменения className:

document.body.style.display = 'none';
document.body.style.display = 'block';

Это приведет к повторному рендерингу макета и часто решает подобные ошибки. Но не всегда.

ну, это пару лет спустя, но если вы все еще рядом, я хочу еще раз поблагодарить вас :) это действительно помогло мне

username 16.12.2011 23:55

Спасибо, это так мило! Рад, что мне помогли :)

I.devries 19.12.2011 12:57

Я хотел бы добавить, что в некоторых случаях (не уверен, когда) это, похоже, не работает, но изменение непрозрачности с помощью document.body.style.opacity = '0.99999'; document.body.style.opacity = '1';, похоже, помогло мне.

David Bradbury 01.04.2014 23:07

У меня проблема, когда анимация не работала в firefox. Я использовал класс переключения jquery, чтобы добавить класс к элементу, который изменил свою позицию. Я использовал переход все. В firefox не заработало. Но как только я добавил это исправление, оно начало работать.

Nearpoint 24.10.2015 01:10

Это приятно слышать! Приятно осознавать, что этот ответ все еще помогает людям после стольких лет.

I.devries 26.10.2015 17:15

Сможете ли вы использовать другой CSS для достижения одного и того же, не полагаясь на псевдоселектор: after? Вы могли бы просто определить фоновое изображение, которое вы выравниваете по мере необходимости (я предполагаю, что вам нужна стрелка с правой стороны).

Например:

.thead .tr .sorted_asc .sorted_asc {
  background: url(images/down_arrow.png) no-repeat right;
}

.thead .tr .sorted_asc .sorted_des {
  background: url(images/up_arrow.png) no-repeat right;
}

Я предлагаю это только потому, что предполагаю, что нет конкретной причины, по которой вам нужно использовать псевдокласс: after. Если вам все же нужно его использовать, обновите.

Сейчас 2014 год, и ни одно из предложенных на этой странице решений, похоже, не работает. Я нашел другой способ: отсоединить элемент от DOM и добавить его на место.

Ошибка все еще может быть вызвана в Firefox 58. К счастью, трюк с непрозрачностью также все еще работает. Просто убедитесь, что правильно рассчитали время. Возможно, вам потребуется установить тайм-аут между изменениями непрозрачности.

Другие вопросы по теме