我正在尝试检测我正在加载内容的div的高度。这个div没有指定的高度,因为我正在将页面加载到它中,并且它们自己以不同的数量填充div。我认为我使用的代码无效。
#content div
在document 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高;所以它没有被切换。
答案 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来检测未设置的高度。