如何获取文本区域内文本的高度

Ada*_*dam 30 javascript textarea innerhtml

我有一个textarea文本Hello World.我想得到这篇文章的高度.

我试过用:

var element = document.getElementById('textarea');
var textHeight = element.innerHTML.offsetHeight;
Run Code Online (Sandbox Code Playgroud)

和:

var textHeight = element.value.offsetHeight;
Run Code Online (Sandbox Code Playgroud)

但是这些不是给出文本的数字,而是给出textarea元素的高度.

War*_*rty 18

创建一个span元素,将Span的innerHTML设置为"Hello World".
获得跨度的offsetHeight.

var span = document.createElement("span");
span.innerHTML="Hello World"; //or whatever string you want.
span.offsetHeight // this is the answer
Run Code Online (Sandbox Code Playgroud)

请注意,您必须将span的字体样式设置为textarea的字体样式.

你的例子永远不会有效,因为innerHTML和value都是字符串.String不定义offsetWidth.

如果要在textarea中获取所选文本的高度,请使用selectionStart/selectionEnd查找textarea的选定文本.

  • 在offsetHeight为我返回任何内容之前,需要将跨度附加到文档.我想你需要添加它与textarea相同的样式,但你不知道什么css专门应用于textarea,所以我不知道这个解决方案实际上是如何工作的? (7认同)

ede*_*ett 17

element.scrollHeight可能值得研究.

如果我要接近这个(我根本没有测试过),我会将textarea的高度设置为1px来测量滚动高度,然后重置textarea的高度.

https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollHeight

  • 刚测试了这个,它解决了我用scrollHeight给出奇怪值的问题(每次你在IE11上输入/删除一个字符时,滚动高度增加).通过首先将文本区域的高度设置为1px,它根据需要给出了文本的高度. (2认同)

pat*_*ick 6

在jQuery中没有scrollHeight,所以它需要一些解决方法.解决方案是:

var areaheight=$("textarea#element")[0].scrollHeight;
$("#element").height(areaheight);
Run Code Online (Sandbox Code Playgroud)

或更短:

$("#element").height($("#element")[0].scrollHeight)
Run Code Online (Sandbox Code Playgroud)

  • 它不是出于动态目的.如果您希望它动态地将高度重置为auto,则读取scrollheight并设置为该高度. (2认同)

小智 5

您可以使用 element.scrollHeight (就像帕特里克回答的那样)但它需要一些更正(我在示例中使用 jQuery):

1) 如果你的 textarea 有填充,你需要减去它(顶部和底部)。

2)如果元素已经设置了高度,则需要将其设置为零(仅用于测量然后将其设置回来,否则返回此高度+填充)

var h0 = $(element).height();  // backup height
$(this).height(0); 
var h = $(this).get(0).scrollHeight - $(this).css('paddingTop').replace('px','')*1 - $(this).css('paddingBottom').replace('px','')*1; // actual text height
$(this).height(h0); // set back original height (or new height using h)
Run Code Online (Sandbox Code Playgroud)

不需要与 textarea 具有相同 css 的额外跨度。