使用文本溢出获取跨度内的文本宽度:省略号;在 IE11
Get width of text in span with text-overflow: ellipsis; at IE11
我有一个跨度在 div 中,设置了文本溢出:
<div id="parent" style="width: 50px; overflow: hidden; text-overflow: ellipsis;">
<span id="child">exampleasdaadasdsfdgs</span>
</div>
当我尝试获取 span 中文本的宽度时,我尝试了:
$("#child").width();
在大多数浏览器中它可以工作,但在 IE 11(可能更多)中它不能。
当我删除 "text-overflow: ellipsis;" 时,它会显示正确的文本长度。
我做了一个fiddle来测试
除了获取文本的长度并将其与字体大小相乘外,是否有一种好的(而且不会很慢)方法来使用 IE11 获取宽度?
如果您知道字体大小和字体系列,您可以使用canvas measureText() 获取文本宽度
function textWidth(text, font) {
font = font || "16px Arial"
var c = document.createElement('canvas');
var ctx = c.getContext("2d");
ctx.font = font;
return ctx.measureText(text).width;
}
var myText = $('#mySpan').html();
console.log(textWidth(myText))
请记住,它只有在您事先知道字体大小和字体系列时才有效。
这是我想出的另一个答案,虽然它有时可能不起作用,例如 span 从父级获取显示块样式和填充。位置也可以是绝对的。
这通过创建新元素,将其附加到父元素或正文,测量其宽度然后删除它来实现。
function textWidth(text, parent) {
var textElement = $('<span style="opacity:0; position: fixed; overflow: visible" class="it_has_similar_style_as_the_one_we_need_to_measure">' + text + '</span>');
//if you have a parent element, append it here so it can inherit some necessary styles
if(!parent) {
$(document.body).append(textElement);
} else {
parent.append(textElement);
}
var width = textElement.width();
textElement.remove();
return width;
}
我现在使用的解决方案是删除样式 {text-overflow: ellipsis;} 并在测量后再次添加它。
$("#parent").css("text-overflow", "clip");
$('#childwidth').html($("#child").width());
$("#parent").css("text-overflow", "ellipsis");
对我来说,这是目前最好的解决方案(参见 jsfiddle)。
我有一个相对复杂的布局,它的长度相对较长,重现此布局需要更多时间。
我有一个跨度在 div 中,设置了文本溢出:
<div id="parent" style="width: 50px; overflow: hidden; text-overflow: ellipsis;">
<span id="child">exampleasdaadasdsfdgs</span>
</div>
当我尝试获取 span 中文本的宽度时,我尝试了:
$("#child").width();
在大多数浏览器中它可以工作,但在 IE 11(可能更多)中它不能。 当我删除 "text-overflow: ellipsis;" 时,它会显示正确的文本长度。
我做了一个fiddle来测试
除了获取文本的长度并将其与字体大小相乘外,是否有一种好的(而且不会很慢)方法来使用 IE11 获取宽度?
如果您知道字体大小和字体系列,您可以使用canvas measureText() 获取文本宽度
function textWidth(text, font) {
font = font || "16px Arial"
var c = document.createElement('canvas');
var ctx = c.getContext("2d");
ctx.font = font;
return ctx.measureText(text).width;
}
var myText = $('#mySpan').html();
console.log(textWidth(myText))
请记住,它只有在您事先知道字体大小和字体系列时才有效。
这是我想出的另一个答案,虽然它有时可能不起作用,例如 span 从父级获取显示块样式和填充。位置也可以是绝对的。 这通过创建新元素,将其附加到父元素或正文,测量其宽度然后删除它来实现。
function textWidth(text, parent) {
var textElement = $('<span style="opacity:0; position: fixed; overflow: visible" class="it_has_similar_style_as_the_one_we_need_to_measure">' + text + '</span>');
//if you have a parent element, append it here so it can inherit some necessary styles
if(!parent) {
$(document.body).append(textElement);
} else {
parent.append(textElement);
}
var width = textElement.width();
textElement.remove();
return width;
}
我现在使用的解决方案是删除样式 {text-overflow: ellipsis;} 并在测量后再次添加它。
$("#parent").css("text-overflow", "clip");
$('#childwidth').html($("#child").width());
$("#parent").css("text-overflow", "ellipsis");
对我来说,这是目前最好的解决方案(参见 jsfiddle)。 我有一个相对复杂的布局,它的长度相对较长,重现此布局需要更多时间。