Các textWidth
hàm được cung cấp trong các câu trả lời và chấp nhận a string
làm đối số sẽ không tính đến khoảng trắng ở đầu và cuối (chúng không được hiển thị trong vùng chứa giả). Ngoài ra, chúng sẽ không hoạt động nếu văn bản chứa bất kỳ đánh dấu html nào (một chuỗi con <br>
sẽ không tạo ra bất kỳ đầu ra nào và
sẽ trả về độ dài của một khoảng trắng).
Đây chỉ là vấn đề đối với các textWidth
hàm chấp nhận a string
, bởi vì nếu một phần tử DOM được cung cấp, và.html()
được gọi theo phần tử, thì có lẽ không cần phải sửa lỗi này cho trường hợp sử dụng như vậy.
Nhưng nếu, ví dụ: bạn đang tính toán chiều rộng của văn bản để sửa đổi động chiều rộng của một input
phần tử văn bản khi người dùng nhập (trường hợp sử dụng hiện tại của tôi), bạn có thể sẽ muốn thay thế các khoảng trắng đầu và cuối bằng
và mã hóa chuỗi sang html.
Tôi đã sử dụng giải pháp của philfreo vì vậy đây là một phiên bản của nó để sửa lỗi này (với nhận xét về bổ sung):
$.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();
};