我在 DOM 中添加了一个块级元素,比如一个p
标签。它的尺寸应该是自动计算的(例如自动)。但是,至少在最初,我不能用 jQuery 检索它的高度。过了一段时间(大概已经发生了一些布局处理),我可以检索高度。
为了使一个元素真正可测量,除了将其添加到 DOM 之外,为了使其计算出的高度可检索,必须发生什么?
具体来说,我有一个select
元素,其中包含一些option
元素,每个元素都附加了图像 URL 数据。我调用了一个图像选择器插件,它读取option
标签数据,隐藏select
元素,并将选项转换为一个容器,其中的div
元素如下所示:
<div class='container' style='width:800px'>
<div class='convertedOptionElement' style='width:33.33%'>
<div class='thumb' style='width:100%'>
<img src="https://lh3.ggpht.com/hhG6g0m8Q6QqZnloQJHV9uXFdsDjpzD0vJdkbra5e_PiwOjVXuBdVR0D2L0RPmwb1zw=h900">
<p>Image Title</p>
</div>
</div>
</div>
所以我有一个固定宽度的容器,它将以 33.33% 的宽度填充 div 元素(产生 3 列)。这些 div 中的每一个都代表转换后的选项元素之一。在其中的每一个中,都有一个 100% 宽度的 div 元素,其中包含一个img
andp
标记。
此外,我正在使用 imagesLoaded 插件和 masonry 插件来布置图像。在加载每个图像后运行的 imagesLoadedprogress
事件中,我可以清楚地看到img
元素具有非零高度和宽度。然而,它的容器没有,p
标签也没有。
唯一可能发生的特殊情况是,在使用图像选择器插件创建元素后,我立即使用 分离它们$('.convertedOptionElement').detach()
,然后在加载每个图像时触发的 progress
for 事件中imagesLoaded
,我将它们附加到容器并调用masonry.appended
方法以执行布局。这就是问题出现的地方,因为尽管所有内容都在 DOM 中,但计算出的高度为零。
请注意,即使我提供了精确的宽度(例如 250px 而不是 33.33% 和 100%),然后在同一个加载的事件处理程序中,我通过计算现有图像尺寸的缩放高度来明确设置 jQuery 中的宽度和高度(即所有父元素都有明确的大小)...段落标签的高度仍然为零。
这是我的代码,但这是有效的。它在我使用的确切上下文中不起作用,我不知道为什么。http://jsfiddle.net/p7cgahro/7/