当firebug说它是34时,为什么jquery会为offsetHeight返回0?

所以我有一个div,其内容是在运行时生成的,它最初没有与之关联的高度。 当它根据firebug生成时,我可以通过js警告,div仍然具有0的高度。但是,用firebug查看只读属性我可以看到它的偏移高度为34.这个值是我需要。 希望它是显而易见的,但如果不是,这个数字是可变的,它并不总是38。

所以,我认为我可以通过jquery做到这一点https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…

$("#parentDiv").attr('offsetHeight'); 

或者用直js https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…

 document.getElementById("parentDiv").offsetHeight; 

但是返回的所有内容都是0.它是否与偏移高度在此实例中是只读属性这一事实有关? 我怎样才能达到这个高度? 我的意思是萤火虫以某种方式搞清楚它似乎我应该能够。

编辑:以下是div现在的样子https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…

  

此代码由单独库中的控件生成。 所以这是在我的.aspx页面中创建它的实际代码。

  

好吧,它略有编辑,但是比我之前的HTML要多得多。 我之前称为“parentDiv”的div在那里被称为“ctl00_BodyContentPlaceHolder_UserControl”。 该代码包括有问题的div,它是兄弟姐妹,父母,祖父母和孩子。 这几乎是萤火虫的直接拷贝。

更新:我应该提到这是在IE 7中完成的。它似乎在Firefox中运行一次,但它现在返回0。 这是否提供了可能的解决方法或任何内容的任何新见解?

https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…你们都必须认为我疯了。

更新:一些造型https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…

 .TransparentBg { background-color: white; filter:alpha(opacity=50); -moz-opacity:0.5; -khtml-opacity: 0.5; opacity: 0.5; } .Foreground { position: absolute; top: 0px; } 

你确定它不是Heisenbug吗? 如果您以编程方式在某处设置高度,然后稍后尝试读取它,则DOM可能无法更新。

您确定元素是否包含在文档树中并呈现? (即不是“display:none”,但“visibility:hidden”是可以的。)

实际上没有参与文档渲染过程的元素没有维度,并且offsetWidth / Height为0。

添加代码示例后的ETA:使用您的确切代码,我在“17”的div上获得offsetHeight。 第一个图像大小正确,第二个图像没有大小。

这与渲染(*)一样正确。 任何无法加载的图像都会被替换为替换文本作为内联跨度。 您的图片没有替代文字,因此它被替换为空字符串。 通常,作为内联元素,不能将其设置为任何特定大小。 例外是第一个图像,因为你已经给它’display:block’,这使得它适合宽度/高度提供的显式尺寸。

在Quirks模式中,你可能会得到一些与图像应该相同的“破碎图像”图标。 这在标准模式下不会发生,因为如果您使用标准,则假定您知道如何正确使用alt文本。

无论哪种方式,如果我用实际工作地址替换“https://stackoverflow.com/questions/636474/why-would-jquery-return-0-for-an-offsetheight-when-firebug-says-its-34/…”URL,尺寸测量对我来说很好。

(*:虽然你实际上看不到它,因为html和’left:1597px;’组合上相当奇怪的’溢出隐藏’。嗯,除非你有一个非常宽的监视器!)

一旦使用load()而不是document.ready()完全加载所有DOM和图像,请尝试调用偏移函数。

$(window).load(function(){//将高度的代码放在这里});

使用有效的IMG SRC加载此文件会提供3个警告框“37”。 没有有效的IMG SRC,它在所有三个上都给出“17”。 您使用的是什么版本的Jquery? 哪个版本的FireFox / IE?

       

我刚刚发现了一个问题,即当文档准备就绪时我得到了一个元素的offsetHeight但是它隐藏在一个容器中

它导致offsetHeight值为0,但是firebug表示它的高度为32。