当我尝试通过调用文本所在的.width()
的{{1}}来检查某些文本的宽度时,我总是得到一个错误的值。那么为什么我再次打电话给span
,我得到正确的价值。
我正在使用.width()
添加文本,然后我想立即获得它的宽度。当我直接通过Chrome打开我的文件(不使用互联网访问Dropbox.com)时,它会在99%的时间内正确获取宽度值。这可能是一个加载问题吗?
这是一个例子: https://dl.dropboxusercontent.com/u/98788053/School/test.html
.append()
答案 0 :(得分:1)
jsFiddle Demo
强> 的 document.ready
和window.onload
之间存在差异,主要是jQuery中的document.ready
实际上会在图像完全加载之前触发(或者在您的情况下是自定义字体),因为DOM在技术上是准备好了。
对于那种情况,我建议你试试这个:
<script>
window.onload = function(){
$("body").append("<span id=\"element\">Text to measure</span>");
$("body").append("<div id=\"thewidth\"></div>");
$("body").append("<input type=\"button\" value=\"Try again\" onclick=\"getWidth();\">");
getWidth();
};
function getWidth()
{
$("#thewidth").html($("#element").width()+"px");
}
</script>
这几乎有效。还有再一步。为了完全预加载字体,您需要在页面上有一个元素来触发加载。它可以为空,此示例不会影响您的布局:
<span style="font-family: JennaSue;visibility:hidden;"></span>
从我的测试中,你不能从头部的脚本中做到这一点,它必须在<body>
标签内完成。