在IE7中更改DHTML后如何强制重排?

Luk*_*ams 17 javascript dhtml reflow internet-explorer-7

我有一个页面,用户可以动态添加文件上传框.添加框会改变它们所处的div的高度,但是它下面的div的某些元素保持在同一个位置,因此它们开始与新的DOM元素重叠.

这在IE8,Firefox,Chrome中正常工作.如何强制IE7使用新的DHTML重排页面?

我制定的最佳解决方案是:

window.resizeBy(1, 0); 
setTimeout(UndoResize, 0);
Run Code Online (Sandbox Code Playgroud)

但它不适用于最大化窗口(它恢复窗口).

Nic*_*itz 40

尝试:

element.className = element.className;
Run Code Online (Sandbox Code Playgroud)

修改后的div(或者可能是其父级,甚至是更远的祖先,取决于各种因素,例如相对定位的遏制).

由于className已经分配了一个值,IE将重排并重新绘制页面的该部分,以防影响该元素的CSS发生更改.幸运的是,它没有被优化以检查className值是否实际上从其先前的值改变,因此上述将触发回流而不会破坏任何其他值.

我确实找到了一个固定IE6但是打破了IE7的场合,但试试看它是否适合你.

  • 是! 这个问题影响正文下方的元素,所以我使用:document.body.className = document.body.className; 谢谢! (9认同)