Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/478.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获得修剪过的DIV的完整高度_Javascript_Html - Fatal编程技术网

Javascript 获得修剪过的DIV的完整高度

Javascript 获得修剪过的DIV的完整高度,javascript,html,Javascript,Html,我如何获得包括div剪裁区域在内的div高度 <div style="height: 20px; overflow: hidden"> content<br>content<br>content<br> content<br>content<br>content<br> content<br>content<br>content<br> </div>

我如何获得包括div剪裁区域在内的div高度

<div style="height: 20px; overflow: hidden">
  content<br>content<br>content<br>
  content<br>content<br>content<br>
  content<br>content<br>content<br>
</div>

内容
内容
内容
内容
内容
内容
内容
内容
内容

那是不可能的。您可以尝试删除该样式,并在获得高度后使用javascript进行设置。这不是最优雅的解决方案,但我认为这是唯一的解决方案。

好吧,你不能这样做,但在容器中添加一个内部元素时,这是可能的,如下所示:

<div id="element" style="height: 20px; overflow: hidden;">
    <p id="innerElement"> <!-- notice this inner element -->
        content<br />content<br />content<br />
        content<br />content<br />content<br />
        content<br />content<br />content<br />
    </p>
</div>
另外,要使此JavaScript正常工作,请将其放在
#元素
div之后,因为如果没有指示它这样做,则在DOM准备就绪之前执行纯JavaScript。要在DOM准备就绪时使其工作,请

但我建议,如果您打算在您的站点中扩展JavaScript操作,它将在以后派上用场

另外,jQuery是真正的力量

这样,只需将此脚本添加到您的
(假设您已经包含jQuery):


这里有一种方法可以实现您的需求,使用费边思想:

function GetHeight() {
    var oDiv = document.getElementById("MyDiv");
    var sOriginalOverflow = oDiv.style.overflow;
    var sOriginalHeight = oDiv.style.height;
    oDiv.style.overflow = "";
    oDiv.style.height = "";
    var height = oDiv.offsetHeight;
    oDiv.style.height = sOriginalHeight;
    oDiv.style.overflow = sOriginalOverflow;
    alert("Real height is " + height);
}

实时演示和测试用例:

这在所有情况下都有效,无论您的内部是文本节点还是容器。这是在使用jquery,但您不需要这样做

//return the total height.
totalHeight = $('#elem')[0].scrollHeight;
//return the clipped height.
visibleHeight = $('#elem').height();
$('#elem')[0]正在从jquery调用返回dom元素。因此,您可以在任何dom元素上使用纯ol'javascript。

原生javascript。早在MSIE 6:

<div id="cont" style="width:100px;height:100px;overflow:auto;border:#000 solid 1px;">
    <div style="height:1500px;">dddd</div>
</div>


<script>alert(document.getElementById('cont').scrollHeight)</script>

dddd
警报(document.getElementById('cont').scrollHeight)

使用元素的
滚动高度
,而不是
clientHeight
offsetHeight


不过,包装内容的方法更好。

我对这个想法不屑一顾,我认为,如果能很好地包装成函数,它就足够优雅了。:)是的。看来这是最好的办法。谢谢哦,是的,我喜欢jQuery。可爱的库。提示:(这让我抓到了)如果你一直从高度或视线之外返回0,请确保在进行测量之前已将元素设置为可见。这是一种很好的方法。谢谢不需要添加内部元素,scrollHeight属性包含元素的高度,包括剪裁区域。是的,这样就可以了。虽然我希望在计算高度之前不需要移除溢出。实际上,这恰好完美地解决了我的问题,因为溢出设置/重置的速度并没有带来任何影响scroll@Prakash由于我只设置了一个变量,然后将原始溢出和高度设置回原来的值,所以在一个“勾号”内完成这样用户就不会在UI中看到任何变化。对于任何寻求更好方法的人,跳过接受的答案,尝试@Colt答案。除了这个答案使用jQuery,这个问题没有问任何关于jQuery的问题。我认为重点是使用
滚动高度
。。。不是jQueryThe技巧在这里的scrollHeight属性中,它包含剪切前元素的高度。该属性在没有jQuery的情况下可用。太棒了!非常感谢。
//return the total height.
totalHeight = $('#elem')[0].scrollHeight;
//return the clipped height.
visibleHeight = $('#elem').height();
<div id="cont" style="width:100px;height:100px;overflow:auto;border:#000 solid 1px;">
    <div style="height:1500px;">dddd</div>
</div>


<script>alert(document.getElementById('cont').scrollHeight)</script>