m0_67644151 2023-02-18 17:51 采纳率: 71.4%
浏览 24
已结题

js中span的文本如何才能只在一行内显示

实际上并不是真的要显示,而是要获取只显示一行时的宽度。
已有如下代码:

document.getElementById('input').addEventListener('change', function () {
        var file = this.files[0];
        var reader = new FileReader();
        reader.onload = function (progressEvent)    // 据说意思是输入文件后再读取
        {
            /* 读入临时文件 */
            var fileContentArray = this.result.split(/\r\n|\n/);
            var line = fileContentArray[0];
            console.log(fileContentArray[0]);

            /* 计算高度和宽度 */
            for (var line = 1; line < fileContentArray.length - 1; line++)  // 输入文件的第一个是总数
            {
                //text[line - 1] = fileContentArray[line];    // 记下每一位的文本
                let spanDom = document.createElement("span");
                spanDom.style.fontSize = "25";
                spanDom.style.opacity = "0";
                spanDom.innerHTML = fileContentArray[line];
                spanDom.style.fontFamily = "Microsoft YaHei";
                document.body.append(spanDom);
                let size = {};
                size = spanDom.getBoundingClientRect();
                spanDom.remove();
                width[line - 1] = size.width;   // 将宽度和高度写入数组
                height[line - 1] = size.height;
            }
            if (width.length != fileContentArray.length - 2)    // 确认是否有丢掉的内容
            {
                alert("转换程序出现错误。请将\"-9\"输入之前的程序。");
            }
......
        };
        reader.readAsText(file);

    });

但这样得到的height有一部分不是33.333335876464844(单行汉字)而是66.66667175292969(双行),请问如何解决这一问题?希望能附一下代码,谢谢。

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-02-18 17:57
    关注

    基于Monster 组和GPT的调写:
    可能是由于设置字体的高度和行高的不同导致的。可以尝试在创建 spanDom 元素后,再添加一个样式 line-height: 1;,这将使其行高等于字体的高度,这样应该能够得到预期的单行高度。

    修改后的代码如下:

    let spanDom = document.createElement("span");
    spanDom.style.fontSize = "25";
    spanDom.style.opacity = "0";
    spanDom.style.lineHeight = "1"; // 添加此行
    spanDom.innerHTML = fileContentArray[line];
    spanDom.style.fontFamily = "Microsoft YaHei";
    document.body.append(spanDom);
    let size = {};
    size = spanDom.getBoundingClientRect();
    spanDom.remove();
    
    
    

    需要注意的是在设置字体大小时,需要加上单位 px,例如 spanDom.style.fontSize = "25px";,否则可能会出现意想不到的结果。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 2月25日
  • 已采纳回答 2月25日
  • 创建了问题 2月18日

悬赏问题

  • ¥15 用ns3仿真出5G核心网网元
  • ¥15 matlab答疑 关于海上风电的爬坡事件检测
  • ¥88 python部署量化回测异常问题
  • ¥30 酬劳2w元求合作写文章
  • ¥15 在现有系统基础上增加功能
  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”