【发布时间】:2020-05-01 11:42:14
【问题描述】:
如何最准确地强制浏览器重新计算样式,无论是在整个主体上还是在单个元素上?
我不能简单地通过替换 innerHTML 或其他东西来重新加载整个 DOM,因为这会丢失所有附加的事件处理程序,所以我需要使用只会强制浏览器重新计算样式的东西。这确实需要与 IE8 一起使用。
我已经尝试搜索任何可以解决此问题的方法,但至少对于“重新计算样式”一词我没有找到任何地方,我能找到的与“重新加载样式”相关的唯一结果是“How to refresh the style of a page after css switch” .不过,这个问题对我不起作用,因为我不是直接更改需要更改样式的元素的类,而是它的兄弟。
Here is a simplified demo,只需相关代码:
HTML:
<span id="foo">This gets a class,</span>
<div>...and this should become red,</div>
<button onclick="document.getElementById('foo').className = 'foo';">...if you click here</button>
CSS:
span.foo + div {color:red;}
如果您测试该演示,至少在 IE11 的 IE8 仿真模式下,您会发现样式不会更新。对我来说,它只有在我在 F12 界面的 DOM 查看器中选择了节点后才会更新。 (PS:IE8-emulation模式在IE11的F12界面底部标签)。
【问题讨论】:
-
请不要使用内联 JavaScript。它会导致可读性差,通常是一种不好的做法。
-
如果您需要支持 IE 8,则应在 IE 8 中进行测试,而不是在模拟器中进行测试,这可能会导致在真实浏览器中可能不存在的问题。
-
@RUJordan 就像我说的,我做了一个简化版。这只是一个非常快速的演示。
-
@Pavlo 既不回答也不使我的问题无效。我的问题仍然存在:如何强制浏览器重新计算样式?
标签: javascript jquery css internet-explorer-8