牛骨文教育服务平台(让学习变的简单)
博文笔记

JS获取文本在HTML中的真实长度

创建时间:2015-11-24 投稿人: 浏览次数:133

当控件内字符串大小 超过 控件字符显示区域 大小,就发生了truncation。

表现在Web应用中,就是HTML中的某个元素(控件)与元素value(字符)的大小不符,如下图所示。

根据[1]中给出的方法,可以得到文本的宽度。它是将文本构造成一个带hidden属性的div,然后获取其CSS属性来得到宽度的。
这里比较关键的就是获取浏览器默认font属性的方法。要注意不同浏览器中不同元素的默认font是不一样的,chrome下input元素的默认font-size是13.3333px,默认font-family是Arial。而div元素的默认font-size是16px,默认font-family是Times New Roman。可以用jQuery得到这些参数:

$("input").css("font-size");
$("input").css("font-family");
为了测试[1]中的方法检测的准不准,在Chrome中将input元素的字符宽度调整为检测值152px后,input元素的truncation消失了。


本文测试源代码:

<html>
<head>
</head>

<body>
	
	<div>
		<input id="btn" type="button" value="hello html truncation issue" style="width:150px"></input>
	</div>
	
	<script type="text/javascript" src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
	<script type="text/javascript">
	String.prototype.width = function(font) {
		var f = font || "12px arial",
		o = $("<div>" + this + "</div>")
            .css({"position": "absolute", "float": "left", "white-space": "nowrap", "visibility": "hidden", "font": f})
            .appendTo($("body")),
		w = o.width();

		o.remove();
		return w;
	}


	$(document).ready(function(){
		ele = document.getElementById("btn");
		//get input element default font properties
		ele_font_size = $("input").css("font-size");
		ele_font_family = $("input").css("font-family");
		
		console.log("hello html truncation issue".width( ele_font_size + " " + ele_font_family));
	});
	</script>
</body>
</html>



参考:

[1] http://stackoverflow.com/questions/118241/calculate-text-width-with-javascript/21015393#21015393



声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。