The textWidthfungsi yang disediakan dalam jawaban dan yang menerima stringsebagai argumen tidak akan memperhitungkan terkemuka dan trailing spasi putih (yang tidak diberikan dalam wadah dummy). Juga, mereka tidak akan bekerja jika teks berisi markup html apa pun (sub-string <br>tidak akan menghasilkan keluaran apa pun dan akan mengembalikan panjang satu spasi).
Ini hanya masalah untuk textWidthfungsi yang menerima a string, karena jika elemen DOM diberikan, dan .html()dipanggil ke elemen tersebut, mungkin tidak perlu memperbaikinya untuk kasus penggunaan seperti itu.
Tetapi jika, misalnya, Anda menghitung lebar teks untuk secara dinamis mengubah lebar inputelemen teks saat pengguna mengetik (kasus penggunaan saya saat ini), Anda mungkin ingin mengganti spasi di depan dan di belakang dengan dan menyandikan string ke html.
Saya menggunakan solusi philfreo jadi berikut adalah versi yang memperbaiki ini (dengan komentar tentang tambahan):
$.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();
};