代码之家  ›  专栏  ›  技术社区  ›  Freewalker

如何在IE7中更改DHTML后强制回流?

  •  17
  • Freewalker  · 技术社区  · 16 年前

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

    我想出的最佳解决方案是:

    window.resizeBy(1, 0); 
    setTimeout(UndoResize, 0);
    

    2 回复  |  直到 16 年前
        1
  •  40
  •   NickFitz    16 年前

    尝试:

    element.className = element.className;
    

    随着 className 类名 该值实际上与之前的值不同,因此上述操作将触发回流,而不会破坏其他任何内容。

        2
  •  3
  •   jakub.g    13 年前

    element.className = element.className

    以下所有行

    try{
        element.parentNode.style.cssText += "";
        element.parentNode.style.zoom = 1;
        element.style.cssText += "";
        element.style.zoom = 1;
    }catch(ex){}
    

    我们已经有了前两条线(用 try-catch

    在最大化和非最大化窗口中都进行了测试。

    try/catch 之所以到位,是因为在某些情况下(例如在 iframe

    相反,对于IE8, 似乎在做它的工作(是的,我们都喜欢每个版本的条件代码……)

    我喜欢Win XP作为一个操作系统,但在IE用户使用它之前,我们必须找到解决这些疯狂问题的方法。..该死的悲伤。


    try {
        var s1 = domElt.parentNode.style, s2 = domElt.style;
        var dummyCss = "foo:foo;"; // do not add leading ';' here!
        s1.cssText += "";
        s1.zoom = 1;
        s2.cssText += dummyCss;
        s2.cssText = s2.cssText.replace(dummyCss, "");
    } catch (ex) {}