Самое обычное решение - создать инлайновый элемент (у блочных ширина обычно или 100%, или заданная), например, span, задать его текст, шрифт и измерить его ширину функцией width().
Например, это можно сделать так:
function textWidth(text,fsize){
var newelem = $('<span>');
newelem.text(text);
newelem.css('font-size', fsize);
newelem.hide();
$('body').append(newelem);
var w = newelem.width();
newelem.remove();
return w;
};
Использовать следующим образом:
var mytextwidth = textWidth('lalala','16px');
В прошлом примере мы не определяем шрифт, а следовало бы. Конечно, передачу шрифта через параметр сделать проще простого, но раз уж мы используем jquery, сделаем так:
$.fn.textWidth = function(){
var newelem = $('<span>');
newelem.text($(this).text());
newelem.css({
'font-size': $(this).css('font-size'),
'font-weight':$(this).css('font-weight'),
'font-family':$(this).css('font-family'),
'font-style':$(this).css('font-style')
});
newelem.hide();
$('body').append(newelem);
var w = newelem.width();
newelem.remove();
return w;
};
И мы можем использовать эту функцию для любого jquery-объекта:
var mytextwidth = $('#myelement').textWidth();