Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.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_Css - Fatal编程技术网

Javascript 根据内部文本获取div的高度

Javascript 根据内部文本获取div的高度,javascript,html,css,Javascript,Html,Css,我有一个DIV,里面有一些文本。但是DIV的高度从0px开始,它还有一个“overflow:hidden”。之后,我使用动画系统来增加DIV的高度。但是我不能给DIV一个固定的高度,因为DIV中文本的长度不同 当DIV足够大,可以容纳其中的所有内容时,有没有办法告诉我们DIV的高度是多少?也许您可以尝试以下方法: 将文本放入另一个DIV中,如 <div> <div>some text</div> </div> 一些文本 然后根据内部di

我有一个DIV,里面有一些文本。但是DIV的高度从0px开始,它还有一个“overflow:hidden”。之后,我使用动画系统来增加DIV的高度。但是我不能给DIV一个固定的高度,因为DIV中文本的长度不同


当DIV足够大,可以容纳其中的所有内容时,有没有办法告诉我们DIV的高度是多少?

也许您可以尝试以下方法:

将文本放入另一个DIV中,如

<div>
   <div>some text</div>
</div>

一些文本
然后根据内部div(没有隐藏溢出)的高度设置外部div(作为隐藏溢出)的动画


希望这有帮助

也许你可以试试这个:

将文本放入另一个DIV中,如

<div>
   <div>some text</div>
</div>

一些文本
然后根据内部div(没有隐藏溢出)的高度设置外部div(作为隐藏溢出)的动画


希望这对您有所帮助,这取决于您正在做/使用的内容。您不需要知道高度,因为将其设置为“自动”将确保其展开以填充内容

但是,在使用javascript获取高度之前,也不能将高度设置为0。例如,在jQuery中:

$("div").each(function()
{

  $(this).attr("data-height", $(this).height()).css({"height": "0", "overflow": "hidden");

});

现在,每个div都有一个名为“数据高度”的属性,该属性的值为其原始高度。然后,您可以在需要时使用此选项展开div。

根据您正在执行/使用的操作,您不需要知道高度,因为将其设置为“自动”将确保其展开以填充内容

但是,在使用javascript获取高度之前,也不能将高度设置为0。例如,在jQuery中:

$("div").each(function()
{

  $(this).attr("data-height", $(this).height()).css({"height": "0", "overflow": "hidden");

});

现在,每个div都有一个名为“数据高度”的属性,该属性的值为其原始高度。然后,您可以在需要时使用此选项来展开div。

在设置div显示动画之前,克隆div并取消
高度:0px
约束(例如,将高度更改为自动)。然后获取克隆div的高度,以便在动画中使用

在jQuery中,这看起来像:

var myDiv = $('div');
var myDivClone = div.clone().insertAfter(myDiv).css('height','auto');
var myDivHeight = myDivClone.outerHeight();
myDivClone.remove();
myDiv.animate({height: myDivHeight}, 250);
请注意实际克隆相关元素的重要性,而不仅仅是创建一个新元素并用相同的内容填充它。您需要准确地重新创建元素(而不是随后进行的高度修改),包括类等


还要注意在
myDiv
之后立即将其注入DOM的重要性。这是因为在计算高度时,CSS将影响它,就像影响
myDiv
一样。唯一可能的例外是,如果在CSS中使用
:last child
选择器,克隆最终成为父元素的最后一个子元素。但这类问题应该很容易解决。

在设置div显示动画之前,克隆div并去掉
高度:0px
约束(例如,将高度更改为自动)。然后获取克隆div的高度,以便在动画中使用

if(el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth)
{
    //keep making element bigger
    el.style.height = parseInt(el.style.height) + 2 + "px"
}
在jQuery中,这看起来像:

var myDiv = $('div');
var myDivClone = div.clone().insertAfter(myDiv).css('height','auto');
var myDivHeight = myDivClone.outerHeight();
myDivClone.remove();
myDiv.animate({height: myDivHeight}, 250);
请注意实际克隆相关元素的重要性,而不仅仅是创建一个新元素并用相同的内容填充它。您需要准确地重新创建元素(而不是随后进行的高度修改),包括类等

还要注意在
myDiv
之后立即将其注入DOM的重要性。这是因为在计算高度时,CSS将影响它,就像影响
myDiv
一样。唯一可能的例外是,如果在CSS中使用
:last child
选择器,克隆最终成为父元素的最后一个子元素。但这类问题应该很容易解决

if(el.scrollHeight > el.offsetHeight || el.scrollWidth > el.offsetWidth)
{
    //keep making element bigger
    el.style.height = parseInt(el.style.height) + 2 + "px"
}
您可以将此代码段粘贴到某种递归函数或while循环中。本质上,您是在检查滚动条显示的可视区域之外是否有更多内容


您可以将此代码段粘贴到某种递归函数或while循环中。基本上,您是在检查滚动条显示的可视区域之外是否有更多内容。

首先将文本放到屏幕外的div中,然后从中获取维度如何?

首先将文本放到屏幕外的div中,然后从中获取维度如何?

我做了一个可怕的破解但看看这是否足够好。 基本上,通过将高度设置为“自动”,然后将其重置为零,最后使用动画功能来获得内容高度,如下所示:

var tempHeight = $(".sample").css({"height" : "auto"}).height();
$(".sample").css({"height" : "0px"}).animate({
    height : tempHeight
},1000);
其中
.sample
是对具有可变文本内容的div的引用。查看演示以更好地理解

纯Javascript版本:

document.getElementById("sample").style.height = "auto"; //The id of this div is 'sample'
var tempheight = document.getElementById("sample").offsetHeight;
document.getElementById("sample").style.height = "0px";
/*
Custom Animation function, Use tempheight to get the full content
*/

我做了一次可怕的黑客攻击,但看看这是否足够好。 基本上,通过将高度设置为“自动”,然后将其重置为零,最后使用动画功能来获得内容高度,如下所示:

var tempHeight = $(".sample").css({"height" : "auto"}).height();
$(".sample").css({"height" : "0px"}).animate({
    height : tempHeight
},1000);
其中
.sample
是对具有可变文本内容的div的引用。查看演示以更好地理解

纯Javascript版本:

document.getElementById("sample").style.height = "auto"; //The id of this div is 'sample'
var tempheight = document.getElementById("sample").offsetHeight;
document.getElementById("sample").style.height = "0px";
/*
Custom Animation function, Use tempheight to get the full content
*/

你能发布到目前为止的de代码吗?我心中的奥卡姆剃刀想知道,如果你想显示所有内容,为什么会出现
溢出:隐藏。可能您的意思是
max height
或其他什么?溢出:hidden将在高度设置为时隐藏溢出的内容0@MrListerOverflow hidden隐藏div中的所有文本,以便它不会被visib访问;e当div的高度小于其内部的实际内容时。你能发布到目前为止的de代码吗?我心中的Occam剃刀想知道如果你想显示所有内容,为什么会有
溢出:隐藏
。也许你的意思是
max-