假设我使用 动态创建一个 DIV document.createElement
,添加一些内部文本,并想确定它的高度和宽度。我可以看到在将DIV添加到DOM树之前,和等属性为offsetWidth
0 offsetHeight
,这是预期的。一旦以编程方式将其添加到树中,我是否可以期望这些属性立即“准备就绪”,或者是否存在重绘/重排可能会延迟并稍后发生的环境?
textDiv = document.createElement("div");
textDiv.innerHTML = "some dynamically created string";
console.log(textDiv.offsetWidth); // 0
document.body.appendChild(textDiv);
console.log(textDiv.offsetWidth); // OK?
我认为答案类似于“JavaScript 解释器是单线程的,并且由 appendChild 触发的重绘/重排事件是该线程的一部分,并在继续下一条语句之前完成”......但是有人可以检查我的理解吗?
这篇Opera 文章有很多我正在寻找的内容,但不清楚它是如何特定于 Opera 的。在任何情况下,应用程序开发人员似乎都可以假设在进行测量时(例如通过访问 offsetWidth)正确地发生了任何所需的重绘/重排。