Как я могу вынудить WebKit перерисовать/перекрасить для распространения изменений стиля?

У меня есть некоторый тривиальный JavaScript для осуществления изменения стиля:

sel = document.getElementById('my_id');
sel.className = sel.className.replace(/item-[1-9]-selected/,'item-1-selected');
return false;

Это хорошо работает с последними версиями FF, Opera и IE, но перестало работать на последних версиях Chrome и Safari.

Это влияет на двух потомков, которые, оказывается, одноуровневые элементы. Первые одноуровневые обновления, но второе не делает. Дочерний элемент второго элемента также фокусируется и содержит <a> тег, который содержит вышеупомянутый код в атрибуте onclick.

В окне “Developer Tools” Chrome, если я пошагово перемещаю (например, снятие флажка и проверка) какой-либо атрибут какого-либо элемента, вторых одноуровневых обновлений корректного стиля.

Существует ли обходное решение к легко, и программно “пошагово переместите” WebKit в выполнение правильной вещи?

243
задан danorton 14 August 2010 в 13:12
поделиться

1 ответ

Я нашел несколько сложных предложений и много простых, которые не сработали, но есть комментарий к один из них Васил Динков предоставил простое решение для принудительной перерисовки / перерисовки, которое отлично работает:

sel.style.display='none';
sel.offsetHeight; // no need to store this anywhere, the reference is enough
sel.style.display='';

Я позволю кому-нибудь другому прокомментировать, работает ли это для стилей, отличных от «block».

Спасибо, Василь!

304
ответ дан 23 November 2019 в 03:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: