offsetHeight在OnLoad中为0的现象

在使用IE中,特别在目前div+css的方式,往往不定义div的高度,这是在添加div内容后,需要获取div的高度时,往往需要用到offsetHeight。

在使用中,有时会碰到offsetHeight获取到为0的现象,但如果你用各种JS调试工具调试,又能在对象中看到值(如果直接指向offsetHeight是没值的,但如果是对象查看是有值的,在调试器中回车查看对象就已经刷新对象了,所以有值。)

比如下面片段

 

[javascript][/javascript] view plaincopy

  1. <!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Transitional//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd”>
  2. <html>
  3. <head>
  4.     <script language=’javascript’>
  5.         window.attachEvent( “onload”, function(){ _resizeScroll2();} );
  6.         window.onresize=function(){winresize();};
  7.         function _resizeScroll2(){
  8.              var html1 = ‘<div id=”divcj” style=”margin-top:15px;font-size:10px;width:400px;”>’
  9.              + ‘<div style=”float:left;width:50px;”>测试</div>’
  10.              + ‘<div style=”float:left;width:320px;”>danielinbiti</div>’
  11.            + ‘</div>’
  12.            + ‘<div id=”divcj2″ style=”margin-top:15px;font-size:10px;width:400px;”>’
  13.              + ‘<div style=”width:320px;”>danielinbiti</div>’
  14.            + ‘</div>’
  15.              document.getElementById(‘outer’).innerHTML=html1;
  16.              document.getElementById(‘divcj2′).style.display=’none’;
  17.              alert(document.getElementById(‘divcj2’).offsetHeight);
  18.         }
  19.   </script>
  20. </head>
  21. <body>
  22.     <div id=’outer’></div>
  23. </body>
  24. </html>

如果获取divcj的高度,那么在onload中获取到的是0。因为divcj下有float方式布局的。

 

这时如果div简单,可以借助隐藏层,比如这里的divcj2,把float去掉后,获取到的高度和divcj一样高。

标签