传入一个字符串或标签返回其所占的长度
思路说明
- 使用
隐藏的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));