我总是认为具有display:none
CSS样式的元素为height()
和返回0 width()
.
但在这个例子中:
<div id="target" style="display:none;">
a
</div>
Run Code Online (Sandbox Code Playgroud)
alert($("#target").height());
Run Code Online (Sandbox Code Playgroud)
他们没有:http://jsfiddle.net/Gts6A/2/
怎么会?我看到过去有很多次回来过.
Nic*_*ver 55
如果一个元素的offsetWidth
的0
(jQuery是考虑这个"隐藏"),检查这里的话,试图弄清楚的高度应该是什么.它在检查期间在元素via上设置以下属性jQuery.swap()
:
position: "absolute"
visibility: "hidden"
display: "block"
然后它获取高度,通过getWidthOrHeight(...)
该高度,augmentWidthOrHeight(...)
根据框模型添加边框/填充,并将所有上述属性恢复为以前的值.
所以基本上它正在接受元素,从文档流中显示它,获得高度,然后再次隐藏它,所有这些都在UI线程更新之前,所以你永远不会看到这种情况发生.它这样做,那么.height()
/ .width()
作品,甚至在当前隐藏,只要他们的父母是可见的元素......这样你就可以运行.height()
/ .width()
,而不做显示/隐藏把戏它做在你的代码,它的内部处理.height()
和.width()
.
从jQuery 1.4.4开始,这似乎已得到纠正
示例:http://jsfiddle.net/GALc7/1/
我相信这只适用于父级为"display:none"的项目
请参阅有关此问题的文章http://dev.jquery.com/ticket/125
另外,请参阅此示例(另存为.html文件)或查看(http://jsfiddle.net/GALc7/)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Example</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){
alert($("#target").height());
});
</script>
</head>
<body>
<div id="parent" style="display:none;">
<div id="target" style="height:100px;display:block;">
a
</div>
</div>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)