我有一个带有文本Hello World
的textarea
。 我想要获取这个文本的高度。
我尝试使用:
var element = document.getElementById('textarea');
var textHeight = element.innerHTML.offsetHeight;
并且:
var textHeight = element.value.offsetHeight;
但是这些并不提供文本的数量,而是 textarea
元素的高度。
我有一个带有文本Hello World
的textarea
。 我想要获取这个文本的高度。
我尝试使用:
var element = document.getElementById('textarea');
var textHeight = element.innerHTML.offsetHeight;
并且:
var textHeight = element.value.offsetHeight;
但是这些并不提供文本的数量,而是 textarea
元素的高度。
element.scrollHeight 很可能值得研究。
如果我要处理这个问题(我没有进行过测试),我将设置 textarea 的高度为 1px,测量滚动高度,然后重置 textarea 的高度。
https://developer.mozilla.org/zh-CN/docs/Web/API/Element/scrollHeight
创建一个 span 元素,将 Span 的 innerHTML 设置为 "Hello World"。
获取 span 的 offsetHeight。
var span = document.createElement("span");
span.innerHTML="Hello World"; //or whatever string you want.
span.offsetHeight // this is the answer
请注意,您必须将span的字体样式设置为textarea的字体样式。
您的示例永远不会起作用,因为innerHTML和value都是字符串。 字符串不定义offsetWidth。
如果您希望获取文本区域内所选文本的高度,请使用selectionStart / selectionEnd查找文本区域中所选的文本。
var areaheight=$("textarea#element")[0].scrollHeight;
$("#element").height(areaheight);
或更短:
$("#element").height($("#element")[0].scrollHeight)
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)
针对任何使用React的人:
const textarea_ref = useRef(null);
const [idealHeight,setIdealHeight] = useState(0);
const [inputValue,setInputValue] = useState("");
useLayoutEffect(() => { // useLayoutEffect TO AVOID FLICKERING
textarea_ref.current.style.height = '0px'; // NEEDS TO SET HEIGHT TO ZERO
const scrollHeight = textarea_ref.current.scrollHeight; // TO READ THE CORRECT SCROLL HEIGHT WHEN IT SHRINKS
textarea_ref.current.removeAttribute('style'); // REMOVE INLINE STYLE THAT WAS ADDED WITH 0px
setIdealHeight(scrollHeight + 2); // NEEDS TO ADD 2. I THINK IT'S BECAUSE OF THE BORDER
},[inputValue]);
return (
<textarea
// USE idealHeight STATE TO SET THE HEIGHT
value={inputValue}
onChange={onChange}
ref={textarea_ref}
/>
);
附注:它有时仍会闪烁。至少在Chrome浏览器中。
你可以通过获取文本区滚动条的高度来获得文本的高度
const textarea = document.getElementByTagName("textarea");
const height = textarea.scrollHeight;
console.log({ height });
我不确定我是否正确理解了你的问题,但我个人需要知道每行文本的确切高度。 line-height 属性没有正确的值(例如,在 Safari 中,当实际打印文本时,它将四舍五入到最接近的值)。
这是我的解决方法。你应该在文档的开头某处有以下代码。
// set one row in the textarea and get its height
element.rows = 1;
var height1 = parseFloat(window.getComputedStyle(element)["height"]);
// set two rows in the textarea and get its height
element.rows = 2;
var height2 = parseFloat(window.getComputedStyle(element)["height"]);
// Now, the line height should be the difference
var inputLineHeight = height2-height1;
inputLineHeight
应该包含正确的像素值。http://www.quirksmode.org/dom/range_intro.html非常抱歉我不能提供更多帮助。
你的问题在于内联文本没有高度,它只有行高。要使其具有高度,需要将其设置为块级元素,这样所有行都会添加到文本块中,但这仍然取决于盒子的宽度、字体大小、字体系列等。
ItzWarty建议获取文本选择并将其放入一个div中,该div具有与textarea相同的字体和宽度,该textarea具有显示块并允许您获取其高度。
display:none
时,它无法正常工作。 - phil294