我最近在尝试使用 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());
}