美文网首页Web前端之路让前端飞
js格式化文本为html标签

js格式化文本为html标签

作者: 冷态度0817 | 来源:发表于2019-10-27 20:24 被阅读0次

问题背景:表单长文本字段填写无引入富文本编辑器,使用textarea输入,打印表单时,将文本放至表格td内,无法保留textarea的内容格式。主要问题表现为:
①换行符变为空格展示,没有换行显示。
②多个空格变为单个空格显示。
问题解决

/**
* 格式化文本为html标签
* contentId,需进行格式转换的元素ID
**/
function formatText(contentId){
    var content = $('#' + contentId);
    content.each(function(){
        var txt = $(this).text();
        //多个空格变成单个空格显示,所以需替换空格为 
        txt = txt.replace(new RegExp(' ', 'g'), ' ');
        var j =0;
        var span = document.createElement("span");
        for(i=0;i<txt.length;i++){
            if(txt.charAt(i)=='\n'){
                //以换行符做分割
                var partTxt = txt.slice(j,i);
                var p = document.createElement("p");
                p.innerHTML = partTxt;
                span.append(p);
                //由于p标签内容为空时,页面不显示空行,加一个<br>
                if(partTxt==''){
                    span.appendChild(document.createElement("br"));
                }
                j = i + 1;
            }
        }
        var p_end = document.createElement("p");
        p_end.innerHTML = txt.slice(j);
        $(this).text('');
        span.appendChild(p_end);
        $(this).append(span);
    });
}

继续深入:在项目中有打印的需求,当文本内容过多时,需分页显示。这时就需要把文本切割为多个单行的p标签文本,再去计算文本高度进行分页。切割方法按照固定的文本长度进行截断,元素高度属性clientHeight

/**
* 格式化文本为html标签,并切割为多个单行p标签文本
* contentId,需进行格式转换的元素ID
**/
function formatText(contentId){
    var content = $('#' + contentId);
    content.each(function(){
        var txt = $(this).text();
        var j =0;
        var span = document.createElement("span");
        for(i=0;i<txt.length;i++){
            if(txt.charAt(i)=='\n'){
                //以换行符做分割
                var partTxt = txt.slice(j,i);
                var outFlag = false;//溢出标识
                for (var z = 0; z < partTxt.length; z++) {
                    //p标签一行展示长度为31的字符
                    var startIndex = z * 31;//开始下标
                    var endIndex = (z + 1) * 31;//结束下标
                    if (endIndex > partTxt.length) {
                        endIndex = partTxt.length;
                        outFlag = true;
                    }
                    var pTxt = partTxt.slice(startIndex, endIndex);
                    pTxt = pTxt.replace(new RegExp(' ', 'g'),  '&nbsp;');
                    var p = document.createElement("p");
                    p.innerHTML = pTxt;
                    span.append(p);
                    if (outFlag) {
                        break;
                    }
                }
                //由于p标签内容为空时,页面不显示空行,加一个<br>
                if(partTxt==''){
                    span.appendChild(document.createElement("br"));
                    span.appendChild(p);
                }
                j = i + 1;
            }
        }
        var p_end = document.createElement("p");
        p_end.innerHTML = txt.slice(j).replace(new RegExp(' ', 'g'),  '&nbsp;');
        $(this).text('');
        span.appendChild(p_end);
        $(this).append(span.innerHTML);//去除span标签
    });
}

参考文章:js实现html表格<td>标签中带换行的文本显示出换行效果

相关文章

  • js格式化文本为html标签

    问题背景:表单长文本字段填写无引入富文本编辑器,使用textarea输入,打印表单时,将文本放至表格td内,无法保...

  • HTML 基础

    HTML 标题 HTML 段落 HTML 链接 HTML 图像 HTML 文本格式化标签 HTML ...

  • HTML文本格式化-08

    HTML 格式化标签HTML 使用标签 与 对输出的文本进行格式, 如:粗体 or 斜体这些HTML标签被称为...

  • HTML学习:文本格式化

    HTML 中存在一些格式化文本的标签,它们可以被直接使用,而不用再去写样式进行调整。 一、文本格式化 HTML 使...

  • HTML 文本格式化

    直接上代码: HTML 格式化标签 HTML 使用标签 与 对输出的文本进行格式, 如:粗体 or 斜体. 这...

  • HTML常用的行级标签

    ●HTML常用的行级标签 a.文本格式化标签 ①... 定义粗体 ②...

  • HTML速查列表

    HTML基本文档: 基本标签(Basic Tags): 文本格式化(Formatting): 链接(Links):...

  • 前端学习笔记一-html+css

    一.html 排版标签 标题: ~ 段落: 换行: 水平线: 文本格式化标签 加粗: (推荐使用str...

  • HTML速查列表

    HTML基本文档 基本标签(Basic Tags) 文本格式化(Formatting) 链接(Links) 图片(...

  • html标签

    HTML 基本文档 基本标签(Basic Tags) 文本格式化(Formatting) 链接(Links) 图片...

网友评论

    本文标题:js格式化文本为html标签

    本文链接:https://www.haomeiwen.com/subject/teosvctx.html