我有一个<textarea>
元素。我可以使用 JavaScript 来检测其中有(例如)10 行文本吗?
如何使用 JavaScript 获取 <textarea > 中的行数?
IT技术
javascript
html
forms
textarea
rows
2021-02-05 09:18:52
6个回答
好吧,我找到了一种更简单的方法来执行此操作,但是您需要在 CSS 中设置 textarea 的行高。我试图读取脚本中的行高,ta.style.lineHeight
但它似乎没有返回值。
CSS
#ta { width: 300px; line-height: 20px; }
HTML
<textarea id="ta">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Quisque suscipit, nisl eget dapibus condimentum, ipsum felis condimentum nisi, eget luctus est tortor vitae nunc. Nam ornare dictum augue, non bibendum sapien pulvinar ut. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Cras congue congue purus, quis imperdiet tellus ornare in. Nulla facilisi. Nulla elementum posuere odio ut ultricies. Nullam tempus tincidunt elit eget posuere. Pellentesque sit amet tellus sapien. Praesent sed iaculis turpis. Nam quis nibh diam, sed mattis orci. Nullam ornare adipiscing congue. In est orci, consectetur in feugiat non, consequat vitae dui. Mauris varius dui a dolor convallis iaculis.</textarea>
脚本
var taLineHeight = 20; // This should match the line-height in the CSS
var taHeight = ta.scrollHeight; // Get the scroll height of the textarea
ta.style.height = taHeight; // This line is optional, I included it so you can more easily count the lines in an expanded textarea
var numberOfLines = Math.floor(taHeight/taLineHeight);
alert( "there are " + numberOfLines + " lines in the text area");
更新:感谢@Pebbl 解决了错误,这是获取文本内容高度所需的代码(演示)
var calculateContentHeight = function( ta, scanAmount ) {
var origHeight = ta.style.height,
height = ta.offsetHeight,
scrollHeight = ta.scrollHeight,
overflow = ta.style.overflow;
/// only bother if the ta is bigger than content
if ( height >= scrollHeight ) {
/// check that our browser supports changing dimension
/// calculations mid-way through a function call...
ta.style.height = (height + scanAmount) + 'px';
/// because the scrollbar can cause calculation problems
ta.style.overflow = 'hidden';
/// by checking that scrollHeight has updated
if ( scrollHeight < ta.scrollHeight ) {
/// now try and scan the ta's height downwards
/// until scrollHeight becomes larger than height
while (ta.offsetHeight >= ta.scrollHeight) {
ta.style.height = (height -= scanAmount)+'px';
}
/// be more specific to get the exact height
while (ta.offsetHeight < ta.scrollHeight) {
ta.style.height = (height++)+'px';
}
/// reset the ta back to it's original height
ta.style.height = origHeight;
/// put the overflow back
ta.style.overflow = overflow;
return height;
}
} else {
return scrollHeight;
}
}
var calculateHeight = function() {
var ta = document.getElementById("ta"),
style = (window.getComputedStyle) ?
window.getComputedStyle(ta) : ta.currentStyle,
// This will get the line-height only if it is set in the css,
// otherwise it's "normal"
taLineHeight = parseInt(style.lineHeight, 10),
// Get the scroll height of the textarea
taHeight = calculateContentHeight(ta, taLineHeight),
// calculate the number of lines
numberOfLines = Math.ceil(taHeight / taLineHeight);
document.getElementById("lines").innerHTML = "there are " +
numberOfLines + " lines in the text area";
};
calculateHeight();
if (ta.addEventListener) {
ta.addEventListener("mouseup", calculateHeight, false);
ta.addEventListener("keyup", calculateHeight, false);
} else if (ta.attachEvent) { // IE
ta.attachEvent("onmouseup", calculateHeight);
ta.attachEvent("onkeyup", calculateHeight);
}
只有一行js:
var rows = document.querySelector('textarea').value.split("\n").length;
假设您知道行高,最简单的方法是:
function numOfLines(textArea, lineHeight) {
var h0 = textArea.style.height;
ta.style.height = 'auto';
var h1 = textArea.scrollHeight;
textArea.style.height = h0;
return Math.ceil(h1 / lineHeight);
}
这里的技巧是将高度设置为auto
第一个。然后,当您访问 scrollHeight 时,浏览器将进行布局并返回正确的高度,包括任何换行。然后将textarea的高度恢复到原来的值,返回结果。
您可以从 获取实际文本高度Element.scrollHeight
,但要获得正确的高度,必须有一个滚动,这意味着您可以暂时将文本框高度设置为0
,直到获得滚动高度值然后恢复 CSS 高度。
你有一个,你计算基于 CSS line-height 属性值的行数(1 行文本对getComputedStyle(ref).lineHeight
像素有贡献),比如......
function getTextareaNumberOfLines(textarea) {
var previous_height = textarea.style.height, lines
textarea.style.height = 0
lines = parseInt( textarea.scrollHeight/parseInt(getComputedStyle(textarea).lineHeight) )
textarea.style.height = previous_height
return lines
}
注意:您的元素必须存在于 DOM 中才能获得 scrollHeight、lineHeight 高度等。如果尚未存在,请添加它们,计算值,然后将它们从 DOM 中删除。
function countLines(area,maxlength) {
// var area = document.getElementById("texta")
// trim trailing return char if exists
var text = area.value.replace(/\s+$/g, "")
var split = text.split("\n")
if (split.length > maxlength) {
split = split.slice(0, maxlength);
area.value = split.join('\n');
alert("You can not enter more than "+maxlength.toString()+" lines");
}
return false;
}
这是一个简单且经过测试的
其它你可能感兴趣的问题