在调整大小时检测div高度

时间:2009-09-16 10:29:25

标签: javascript jquery html css resize

我正在尝试检测我正在加载内容的div的高度。这个div没有指定的高度,因为我正在将页面加载到它中,并且它们自己以不同的数量填充div。我认为我使用的代码无效。

#content divdocument load上获得了正确的高度,但是在点击load事件时我无法获得高度。

HTML:

<div id="select">
<div id="menu">
    <ul>
    <li><a class="load" href="javascript:void(0)" id="p1">P1</a></li>
    <li><a class="load" href="javascript:void(0)" id="p2">P2</a></li>
    </ul>
</div>
<div id="spacer"></div>
<div id="content"></div>

的CSS:

#content {
    left: 227px;
    top: 20px;
    width: 703px;
    padding: 0 0 100px 0;
    position: absolute;
}

#spacer {
    border-right: 2px solid #000000;
    left: 10px;
    position: absolute;
    top: 710px;
    width: 215px;
}

我的jquery:

$(document).ready(function() {
    //Load Initial Content
    $("#content").html('<ul><li>Loading Content...</li></ul>')
        .load("/content/" + "projects.php", null, function() {
            contentHeight = $("#content").height();
            selectHeight = $("#select").height();

            $("#content").height(contentHeight);
            $("#select").height(selectHeight);
            $("#spacer").height((contentHeight - selectHeight - 40) + "px")
                        .css({"top": selectHeight + 40 + "px" });
            });

    //Load content on click function
    $(".load").click(function(){
        loadName = $(this).attr("id");
        $("#content").html('<ul><li>Loading Content...</li></ul>')
                     .load("/content/" + loadName + ".php", null, function(){
                         contentHeight = $("#content").height();
                         selectHeight = $("#select").height();

                         $("#spacer").height(0);

                         if(selectHeight > contentHeight) {
                         $("#spacer").css({"display": "none"}); 
                         }else{

                         $("#spacer").css({"top": selectHeight + 40 + "px", "display": "block" })
                                     .height((contentHeight - selectHeight - 40) + "px");
                         return false;
                         }
                         });
    });
});

我在装载火炬时得到这个:

<div id="select" style="height: 689px;"/>
<div id="spacer" style="height: 5461px; top: 729px;"/>
<div id="content" style="height: 6190px;"/>

现在如果我点击说P2,内容高度的div保持不变,即使div中的实际内容只有625px高;所以它没有被切换。

3 个答案:

答案 0 :(得分:2)

//Get Content size after load
$("#content").bind("resize", function(){ 
                    $("#content").css({"height": $("#content").height()}); 
                    });

您没有将“px”添加到高度值的末尾

//Get Content size after load
$("#content").bind("resize", function(){ 
                    $("#content").css({"height": $("#content").height() + "px"}); 
                    });

编辑跟随

让它在本地工作,你在点击事件的高度函数末尾缺少括号:

$("#spacer").css({"height": $("#content").height() + "px"}); //added parenthesis enables the #spacer div to change height accordingly

希望这会有所帮助

答案 1 :(得分:2)

除非JQuery非常聪明(并且它很聪明但我认为它不聪​​明)你没有得到resize事件,因为firefox(可能是Safari)只支持window对象上的resize事件。 IE确实支持对诸如DIV等元素的resize事件。

因此,您需要一种不同的方法: -

$(document).ready(function()
{
  $("#content").html('<ul><li>Loading Content...</li></ul>')
              .load("/content/" + "projects.php", null, function()
              {
                window.setTimeout(content_loaded, 0);
              });

  function content_loaded()
  { 
    $("#content").css({"height": $("#content").height() + "px"}); 
  }

  $("#spacer").css({"height": $("#content").height() + "px"});

  $(".load").click(function()
  {
    loadName = $(this).attr("id");

    $("#content").html('<ul><li>Loading Content...</li></ul>')
                 .load("/content/" + loadName + ".php", null, function()
                 {
                   window.setTimeout(content_loaded, 0); });
                 });

    $("#spacer").css({"height": $("#content").height + "px"});
  });
});

注意我在这里使用setTimeout方法,因为在内容更改时整理宽度和高度参数时,IE经常会滞后。通过使用setTimeout,它允许IE在访问高度和宽度属性之前对事物进行排序。您可以选择将其删除并直接将content_loaded作为回调参数传递给load方法。

答案 2 :(得分:-1)

我喜欢使用offsetheight来检测未设置的高度。