如何计算输入 HTML 元素的宽度,使其与其内容的大小相匹配
How to calculate the width of an input HTML element so that it matches the size of its content?
如何计算输入HTML元素的宽度,使其与其内容的大小相匹配?我已经在用户键入时动态更新了输入:
<input type='text' onkeydown='this.size=this.value.length' />
但是,这似乎并不完全正确,因为它没有考虑到某些字符比其他字符长的事实:
- 如果我只输入一些"l"字符,我会得到越来越多的空格
- 如果我只输入一些"w"字符,大小将不足
如何进行?
PS:我为什么要这样做(已经在已删除的答案中回答了这个问题)?我有一些句子,我必须用输入替换括号内容(例如:[用户] 是 [岁] 岁)。我不知道这句话可以是什么,所以我不知道输入的足够长度,我想让它保持在一行上可读(避免太多空格)。
您可以使用(隐藏的)画布和上下文的measureText()
方法来获取字符串的宽度。
编辑:
看起来足够快。
首先,定义一些 CSS...
input,
#input-helper {
display: inline;
font-size: 14px;
font-family: serif;
line-height: 16px;
}
#input-helper {
position: absolute;
top: -10000px;
}
。然后使用一些JavaScript...
var div = document.createElement("div");
div.id = "input-helper";
document.body.appendChild(div);
var input = document.querySelector("input");
input.addEventListener("keyup", function() {
div.textContent = this.value;
input.style.width = div.offsetWidth + "px";
});
jsFiddle。
您还需要为input
元素选择合理的起始宽度。
如果使用jQuery不是问题,这里有一个我在jsFiddle上整理的演示。它使用一个 Autoexpand.js
文件来执行您想要的操作。看看小提琴中的最后一个例子。
一些细节:
- 它基于
.keyup
和.keypress
,以实现最快的响应。 - 它考虑了粘贴到框中的 HTML 标记。处理换行符之类的事情。
- 源文件通过考虑有关字体的所有内容来显示智能处理。
中还包括下载小提琴的粘贴版本的链接,因为jsFiddle Sandbox在IE8中中断。也就是说,它也适用于IE7!
首先:将此div 添加到您想要的位置
<div id="calcsize" style="display:none;"></div>
第二:使用此功能
function getWidthof(txt)
{
$('#calcsize').empty().append(txt);
return $('#calcsize').width();
}
相关文章:
- 根据元素和容器大小计算边距
- 从Rally获取一个特定的标记,以便计算另一个字段中的值
- 使用D3.js计算带有字母间距的文本长度
- 使用CSS或JavaScript计算分页符的数量
- 可以't计算自定义谷歌地图的js
- 如何计算每个元素's的高度,并将这些值用作函数中的变量
- JavaScript计算帮助(乘以时间)
- 如何计算对象文字中的键
- JavaScript循环无法正确计算/显示结果
- 与域在同一台计算机上运行的NODEJS服务器的CORS错误
- 四舍五入JavaScript计算
- 计算HTML中的页数
- 使用jQuery计算数组中的对象以更改进度条
- 如何在jquery中使用实时计算求和值
- 计算多个项目的价格
- 计算CSS3缩放框在另一个框中的最高位置
- 如何计算二十面体的法线
- if(foo!==null)的计算结果为true,即使foo为null
- JavaScript计算不计算
- 如何通过输入或从其他输入中计算出计算出的可观测值