传入一个字符串或标签返回其所占的长度
思路说明
- 使用
隐藏的div元素
来插入传入的HTML
或纯字符串
,并测量其宽度。 - 使用
style="white-space: nowrap;"
来确保字符串不换行。 - 使用
隐藏的div元素
的offsetWidth
来取得宽度。取得之后,要记得移除插入的元素。 - 此外,该方法可能受到浏览器渲染引擎和字体渲染的影响,实际宽度可能略有差异。
代码说明
function getStringWidth(input, fontSize = '12px') {const hiddenDiv = document.createElement('div');hiddenDiv.style.visibility = 'hidden';hiddenDiv.style.position = 'absolute';hiddenDiv.style.whiteSpace = 'nowrap';if (/<[^>]+>/g.test(input)) {hiddenDiv.innerHTML = input;} else {hiddenDiv.textContent = input;}hiddenDiv.style.fontSize = fontSize;document.body.appendChild(hiddenDiv);const width = hiddenDiv.offsetWidth;document.body.removeChild(hiddenDiv);return width;
}
const theString01 = `getStringWidth('<p>Hello, Worl55555<div style="font-size:44px;">8一个</div>d!</p>')`;
const theString02 = `getStringWidth('<p>Hello, Worl55555<div style="font-size:24px;">8一个</div>d!</p>')`;
console.log(theString01, eval(theString01));
console.log(theString02, eval(theString02));
const theString03 = `getStringWidth('h方!!')`;
const theString04 = `getStringWidth('he!!')`;
console.log(theString03, eval(theString03));
console.log(theString04, eval(theString04));