代码之家  ›  专栏  ›  技术社区  ›  Eli Courtwright

IE在样式表更改之前不正确地呈现动态内容

  •  5
  • Eli Courtwright  · 技术社区  · 16 年前

    我有一个用Javascript动态生成的数据表。每隔几分钟,页面就会通过发出Ajax请求、从服务器获取数据并替换表中的数据来刷新数据。这是相当标准的,表格最终看起来像这样:

    setInterval .

    这工作得很好,但由于表可能需要一段时间才能完全生成,我试图聪明地做一些伪双缓冲 display 着手 none

    我正在用以下代码行进行替换

    $("#loading_area tbody").children().appendTo( $("#unplanned tbody").empty() );
    

    但我不能直接做出改变。所以如果我说

    $("#unplanned").css("color", "green");
    

    document.styleSheets[1].rules[3].style.color = "green";
    

    所以我最终通过随机更改样式来解决这个问题,在“展开/折叠”按钮的边距之间切换 1px 0px

    我的问题是,当我尝试打印页面时,行看起来是空白的,因为页面内容没有正确地呈现给打印机。

    id

    3 回复  |  直到 16 年前
        1
  •  3
  •   bobince    16 年前

    在没有测试用例的情况下不能肯定,但一般来说:

    • 确保您正在使用 table-layout: fixed .IE不善于猜测 auto 列宽,尤其是当涉及colspan时。当有很多行时,它在猜测宽度方面也很慢。通过使用固定的表布局为每列设置明确的大小,使IE无法控制这一点。

    • children().appendTo() innerHTML 在表的父元素上。当然,如果你想插入数据(属性值和内容),准备HTML字符串可能会很烦人,因为它必须是HTML转义的。一种解决方法是使用占位符值一次写入所有行,然后在第二遍中通过设置填充真实数据 .data

        2
  •  1
  •   slikts    16 年前

    tbody 然后删除 display.none

    我学到的另一种显示或隐藏表中元素的方法(技巧?)是设置 position absolute 在一排或 display 。这仍然会隐藏它,但不会改变(弄乱)表格的布局。您可以尝试使用它来隐藏缓冲区。

    一般来说,即使在现代浏览器中,表格也是最古怪的元素之一。用它们做任何高级的事情通常会导致这些小麻烦,所以祝你好运。

        3
  •  1
  •   robertc    16 年前

    你在桌子上定好宽度了吗?我突然想到,如果你在隐藏表的情况下生成表,它可能不会拾取当前浏览器窗口宽度等通常用于设置表宽度的值,因此它会回落到最大值。