我正在尝试检测将内容加载到的div的高度.此div没有指定的高度,因为我正在向其中加载页面,它们本身以不同的数量填充div.我认为我使用的代码无法正常工作.
#content div在加载文档时获得正确的高度,但是单击加载事件时我无法获得该高度.
的HTML:
@H_404_10@<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:
@H_404_10@#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:
@H_404_10@$(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",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; } }); }); });
我正在加载中的萤火虫中得到这个:
@H_404_10@<div id="select" style="height: 689px;"/> <div id="spacer" style="height: 5461px; top: 729px;"/> <div id="content" style="height: 6190px;"/>
最佳答案
除非JQuery非常聪明(而且它很聪明,但我认为它不那么聪明),否则您不会收到resize事件,因为Firefox(可能还有Safari)仅支持window对象上的resize事件. IE确实支持DIV等元素的resize事件.
因此,您需要一种不同的方法:
@H_404_10@$(document).ready(function() { $("#content").html('<ul><li>Loading Content...</li></ul>') .load("/content/" + "projects.PHP",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",function() { window.setTimeout(content_loaded,0); }); }); $("#spacer").css({"height": $("#content").height + "px"}); }); });
注意我在这里使用setTimeout方法,因为当内容更改时,IE在整理宽度和高度参数时经常滞后.通过使用setTimeout,它可以使IE在访问height和width属性之前对它们进行排序.您可以选择删除它,并将content_loaded作为回调参数直接传递给load方法.