0

我最近在尝试使用 gwtQuery 计算元素的宽度(带边距)时遇到了一个奇怪的行为。目标是获取给定元素的宽度(包括填充、边框和边距)作为某个父元素的子元素。这个父级可以为一些子级定义特定的 CSS 规则,所以我克隆它,将我的元素添加到这个父级,调用.outerWidth(true)以获取宽度,最后从父级中删除克隆。

它在 Chrome、Firefox 和 IE 10 上运行良好,但在 IE 8 上随机失败(输出 0)。但是我注意到,如果我在将元素添加到 DOM 的那一刻和我得到外部的那一刻之间放置一个“睡眠”宽度,它总是成功的。

我显然不想保持这种睡眠。所以我的问题是,是否有人对如何解决这种行为,甚至是实现相同目标的更好方法有任何见解?

谢谢!

这是一个代码片段

private Integer computeTabWidth(IsWidget tab) {
    GQuery $tab = $("<li></li>").append($(tab).clone());

    $(containerPanel).append($tab);

    // IE 8 debug.
    sleep(100);

    Integer tabWidth = $tab.outerWidth(true);
    $tab.remove();

    return tabWidth;
}

private void sleep(int i) {
    long time = new Date().getTime() + i;

    while (time > new Date().getTime());
}
4

1 回答 1

1

我认为这是一个回流问题,请尝试在阅读之前强制浏览器进行回流,将您的睡眠方法替换为:

$tab.css("offsetHeight")
于 2013-11-12T15:01:06.517 回答