textWidthजवाब में प्रदान की और कहा कि कार्य को स्वीकार stringएक तर्क प्रमुख और सफेद रिक्त स्थान अनुगामी के लिए खाते में नहीं होगा (उन डमी कंटेनर में गाया नहीं कर रहे हैं) के रूप में। साथ ही, वे काम नहीं करेंगे यदि पाठ में कोई html मार्कअप (एक उप-स्ट्रिंग <br>किसी भी आउटपुट का उत्पादन नहीं करेगा और करेगा एक स्थान की लंबाई लौटाएगा) ।
यह केवल उन textWidthकार्यों के लिए एक समस्या है जो एक को स्वीकार करते हैं string, क्योंकि यदि कोई DOM तत्व दिया जाता है, और.html() तत्व को कहा जाता है, तो ऐसे उपयोग के मामले के लिए इसे ठीक करने की आवश्यकता नहीं है।
लेकिन, उदाहरण के लिए, यदि आप पाठ की चौड़ाई की गणना कर रहे हैं, तो पाठ inputप्रकार की चौड़ाई को उपयोगकर्ता प्रकारों (मेरे वर्तमान उपयोग के मामले) के रूप में संशोधित कर सकते हैं, आप शायद स्ट्रिंग के साथ प्रमुख और अनुगामी स्थानों को बदलना और उन्हें एन्कोड करना चाहेंगे। html को।
मैंने दार्शनियो के समाधान का उपयोग किया, इसलिए इसका एक संस्करण है जो इसे ठीक करता है (परिवर्धन पर टिप्पणियों के साथ):
$.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();
};