Answers:
这对我来说更好:
$.fn.textWidth = function(){
  var html_org = $(this).html();
  var html_calc = '<span>' + html_org + '</span>';
  $(this).html(html_calc);
  var width = $(this).find('span:first').width();
  $(this).html(html_org);
  return width;
};'</span>'似乎在第三行之后缺少半冒号,尽管这似乎没有什么区别(在FF9上使用或不使用它)。
                    这是一个比其他发布的功能更好的功能,因为
<input>,<span>或"string"。演示:http://jsfiddle.net/philfreo/MqM76/
// Calculate width of text from DOM element or string. By Phil Freo <http://philfreo.com>
$.fn.textWidth = function(text, font) {
    if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
    $.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font'));
    return $.fn.textWidth.fakeEl.width();
};$.fn.textWidth = function(){
    var self = $(this),
        children = self.children(),
        calculator = $('<span style="display: inline-block;" />'),
        width;
    children.wrap(calculator);
    width = children.parent().width(); // parent = the calculator wrapper
    children.unwrap();
    return width;
};基本结束了符文的改善,不使用.html如此轻视
/括号前缺少了一个<span>:calculator = $('<span style="display: inline-block;" />'),
                    所述textWidth的答案提供和函数接受一个string作为参数将不考虑前缘和后空格(那些未在虚设容器呈现)。另外,如果文本包含任何html标记,则它们将不起作用(子字符串<br>不会产生任何输出,并且 将返回一个空格的长度)。
这对于textWidth接受a 的函数来说只是一个问题string,因为如果给定了DOM元素并.html()对该元素进行了调用,则可能无需针对这种用例进行修复。
但是,例如,如果您要计算文本的宽度input以在用户键入时动态修改文本元素的宽度(我当前的用例),则可能要用替换前导和尾随空格 并对其进行编码到html。
我使用了philfreo的解决方案,所以这里是解决该问题的版本(带有附加说明):
$.fn.textWidth = function(text, font) {
    if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').appendTo(document.body);
    var htmlText = text || this.val() || this.text();
    htmlText = $.fn.textWidth.fakeEl.text(htmlText).html(); //encode to Html
    htmlText = htmlText.replace(/\s/g, " "); //replace trailing and leading spaces
    $.fn.textWidth.fakeEl.html(htmlText).css('font', font || this.css('font'));
    return $.fn.textWidth.fakeEl.width();
};font-size。我必须添加css('font-size'), this.css('font-size'))它才能工作。有什么主意为什么font不能单独复制该价值?
                    .css方法相同的位置,但是我看到我的括号是错误的。应该是css('font-size', this.css('font-size'))。
                    由于框模型的不一致,当试图确定文本宽度时,jQuery的width函数可能会有点阴暗。确定的方法是将div注入到元素内部以确定实际的文本宽度:
$.fn.textWidth = function(){
  var sensor = $('<div />').css({margin: 0, padding: 0});
  $(this).append(sensor);
  var width = sensor.width();
  sensor.remove();
  return width;
};要使用此迷你插件,只需:
$('.calltoaction').textWidth();span您将得到零。在上尝试了此解决方案H2,其中父元素隐藏了溢出,而我只得到了文本的截短长度。也许应该解释一下它应该如何工作才能使它更好地工作?
                    我发现此解决方案效果很好,并且在调整大小之前继承了原始字体:
$.fn.textWidth = function(text){
  var org = $(this)
  var html = $('<span style="postion:absolute;width:auto;left:-9999px">' + (text || org.html()) + '</span>');
  if (!text) {
    html.css("font-family", org.css("font-family"));
    html.css("font-size", org.css("font-size"));
  }
  $('body').append(html);
  var width = html.width();
  html.remove();
  return width;
}org.css("font-weight")。另外,我会说这if(!text)部分是不直观的。如果使用例如,jQuery("#someContainer").textWidth("Lorem ipsum")我想知道在该特定容器中应用时“ Lorem ipsum”的文本宽度。
                    如果保存文本的元素具有固定的宽度,那么符文和Brain都不会为我工作。我做了与Okamera类似的事情。它使用较少的选择器。
编辑:它可能不适用于使用relative的元素font-size,因为以下代码将htmlCalcelement插入其中,body从而释放了有关父级关系的信息。
$.fn.textWidth = function() {
    var htmlCalc = $('<span>' + this.html() + '</span>');
    htmlCalc.css('font-size', this.css('font-size'))
            .hide()
            .prependTo('body');
    var width = htmlCalc.width();
    htmlCalc.remove();
    return width;
};this已经是jQuery对象,因此$(this)是多余的。
                    如果您尝试在选择框中使用文本来执行此操作,或者如果这两个选项无法正常工作,请尝试以下操作:
$.fn.textWidth = function(){
 var calc = '<span style="display:none">' + $(this).text() + '</span>';
 $('body').append(calc);
 var width = $('body').find('span:last').width();
 $('body').find('span:last').remove();
 return width;
};要么
function textWidth(text){
 var calc = '<span style="display:none">' + text + '</span>';
 $('body').append(calc);
 var width = $('body').find('span:last').width();
 $('body').find('span:last').remove();
 return width;
};如果您想先获取文字
事实是,您做错了,您正在cTxt上调用方法,这是一个简单的字符串而不是jQuery对象。cTxt实际上是包含的文本。
对Nico的更改略有不同,因为如果我们引用的是诸如h1或p之类的文本元素,则.children()将返回一个空集。因此,我们将使用.contents(),并使用this而不是$(this),因为我们正在jQuery对象上创建方法。
$.fn.textWidth = function(){
    var contents = this.contents(),
        wrapper  = '<span style="display: inline-block;" />',
        width    = '';
    contents.wrapAll(wrapper);
    width = contents.parent().width(); // parent is now the wrapper
    contents.unwrap();
    return width;
    };在追赶幽灵两天后,试图弄清楚为什么文本的宽度不正确,我意识到是由于文本字符串中的空白导致宽度计算停止。
因此,另一个技巧是检查空格是否引起了问题。用
 不间断的空间,看看是否可以修复它。
人们建议的其他功能也可以很好地工作,但这是空格引起的麻烦。
white-space: nowrap到内联CSS以避免这种情况。
                    如果要确定给定元素内文本节点和元素混合的宽度,则需要使用wrapInner()包装所有内容,计算宽度,然后解开内容。
*注意:您还需要扩展jQuery以添加unwrapInner()函数,因为默认情况下未提供该函数。
$.fn.extend({
  unwrapInner: function(selector) {
      return this.each(function() {
          var t = this,
              c = $(t).children(selector);
          if (c.length === 1) {
              c.contents().appendTo(t);
              c.remove();
          }
      });
  },
  textWidth: function() {
    var self = $(this);
    $(this).wrapInner('<span id="text-width-calc"></span>');
    var width = $(this).find('#text-width-calc').width();
    $(this).unwrapInner();
    return width;
  }
});扩展@philfreo的答案:
我添加了检查功能text-transform,因为text-transform: uppercase通常情况下,诸如此类的操作会使文本变宽。
$.fn.textWidth = function (text, font, transform) {
    if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').hide().appendTo(document.body);
    $.fn.textWidth.fakeEl.text(text || this.val() || this.text())
        .css('font', font || this.css('font'))
        .css('text-transform', transform || this.css('text-transform'));
    return $.fn.textWidth.fakeEl.width();
};调用getColumnWidth()获得文本的with。这工作得很好。
someFile.css
.columnClass { 
    font-family: Verdana;
    font-size: 11px;
    font-weight: normal;
}
function getColumnWidth(columnClass,text) { 
    tempSpan = $('<span id="tempColumnWidth" class="'+columnClass+'" style="display:none">' + text + '</span>')
          .appendTo($('body'));
    columnWidth = tempSpan.width();
    tempSpan.remove();
return columnWidth;
}注意:-如果您希望内联.css仅以样式传递字体细节。
我修改了Nico的代码以满足我的需求。
$.fn.textWidth = function(){
    var self = $(this),
        children = self.contents(),
        calculator = $('<span style="white-space:nowrap;" />'),
        width;
    children.wrap(calculator);
    width = children.parent().width(); // parent = the calculator wrapper
    children.unwrap();
    return width;
};我正在使用.contents(),因为.children()不会返回我需要的文本节点。我还发现返回的宽度受导致包裹的视口宽度的影响,因此我使用的是white-space:nowrap;。以获得正确的宽度,而不考虑视口宽度。
我无法列出所有可100%使用的解决方案,因此根据@chmurson(基于@Okamera)和@philfreo的想法提出了这个混合解决方案:
(function ($)
{
    var calc;
    $.fn.textWidth = function ()
    {
        // Only create the dummy element once
        calc = calc || $('<span>').css('font', this.css('font')).css({'font-size': this.css('font-size'), display: 'none', 'white-space': 'nowrap' }).appendTo('body');
        var width = calc.html(this.html()).width();
        // Empty out the content until next time - not needed, but cleaner
        calc.empty();
        return width;
    };
})(jQuery);this jQuery扩展方法中的对象已经是jQuery对象,因此不需要所有其他功能 $(this)许多示例所具有的所有其他功能。white-space: nowrap,以确保将其作为一行测量(而不是基于其他页面样式的换行)。font单独使用它,还必须明确复制font-size。不确定为什么(仍在调查中)。@philfreo。有时,您还需要另外测量高度,不仅要测量文本,还要测量HTML宽度。我回答了@philfreo,并使其更加灵活和有用:
function htmlDimensions(html, font) {
  if (!htmlDimensions.dummyEl) {
    htmlDimensions.dummyEl = $('<div>').hide().appendTo(document.body);
  }
  htmlDimensions.dummyEl.html(html).css('font', font);
  return {
    height: htmlDimensions.dummyEl.height(),
    width: htmlDimensions.dummyEl.width()
  };
}不同父母的文本宽度可以不同,例如,如果您将文本添加到h1标签中,则它将比div或label宽,所以我的解决方案如下:
<h1 id="header1">
</h1>
alert(calcTextWidth("bir iki", $("#header1")));
function calcTextWidth(text, parentElem){
    var Elem = $("<label></label>").css("display", "none").text(text);
    parentElem.append(Elem);
  var width = Elem.width();
  Elem.remove();
    return width;
}我遇到了类似@ rune-kaagaard的大量文本的解决方案。我发现了这一点:
$.fn.textWidth = function() {
	var width = 0;
	var calc = '<span style="display: block; width: 100%; overflow-y: scroll; white-space: nowrap;" class="textwidth"><span>' + $(this).html() + '</span></span>';
	$('body').append(calc);
	var last = $('body').find('span.textwidth:last');
	if (last) {
			var lastcontent = last.find('span');
			width = lastcontent.width();
			last.remove();
	}
	return width;
};