富文本编辑器的一键排版功能

摘要:
在构建CMS系统时,用户通常会将Word中的内容粘贴到编辑器中。早期的富文本编辑器还提供了删除单词格式的功能。有时,当用户请求打开本地word文件时,系统可以直接将word文件转换为可以在网站上直接浏览的内容。他们不在乎你使用什么技术,有些人为此专门开发了一些前端控件,然后根据用户授权。销售业绩似乎不错=null&&tmpText.trim()。长度˃0;isPart=false;//如果(!

在做CMS系统的时候,用户常常会从word粘贴一些东西到编辑器中,早起的富文本编辑器也都提供了去除word格式的功能(尽管有时候比较难用),甚至有时候用户要求打开一个本地的word文件的时候系统能够直接把word文件转换为网站上可以直接浏览的内容,他们不关心你中间用了什么技术,也有人专门对此做了一些前端控件的开发,然后按用户进行授权,似乎销售成绩还不错。

网络上有很多自称为“一键排版”的小工具,只是他们只是工具,不是类库或者API,开发者不能直接使用,来分析其中一个是如何实现的,首先下载并安装,安装后在系统目录中能够看到它主要也是用web编程技术,只是在外面套了一个窗体便于程序的运行,如截图所示:

富文本编辑器的一键排版功能第1张 

打开index.html即可找到和“一键排版”按钮对应的函数FormatText,代码内容如下:

function FormatText() {
    var myeditor = document.all.Composition;
    if (Format == "Normal") {
        var temps = new Array();
        var tmps = new Array();
        var sec = myeditor.Document.selection.createRange();
        var tmpText = sec.text;
        var isPart = tmpText != null && tmpText.trim().length > 0;
        isPart = false//暂时无法实现局部格式化
        if (!isPart) {
            var imgs = myeditor.Document.images;
            if (imgs != null && imgs.length > 0) {
                for (j = 0; j < imgs.length; j++) {
                    var t = document.createElement("IMG");
                    t.alt = imgs[j].alt;
                    t.src = imgs[j].src;
                    t.width = imgs[j].width;
                    t.height = imgs[j].height;
                    t.align = imgs[j].align;
                    temps[temps.length] = t;
                }
                var formatImgCount = 0;
                for (j = 0; j < imgs.length; ) {
                    imgs[j].outerHTML = "\n#FormatImgID_" + formatImgCount + "#\n";
                    formatImgCount++;
                }
            }
            if (iftable.checked) {
                var tables = myeditor.Document.getElementsByTagName("table");
                if (tables != null && tables.length > 0) {
                    var formatTableCount = 0;
                    for (var k = 0; k < tables.length; ) {
                        tmps[tmps.length] = tables[k].outerHTML;
                        tables[k].outerHTML = "\n#FormatTableID_" + formatTableCount + "#\n";
                        formatTableCount++;
                    }
                }
            }
            var html = processFormatText(myeditor.Document.body.innerText);
            var border = "";
            if (ifborder.checked)
                border = "border=\"1\"";
            else
                border = "";
            if (temps != null && temps.length > 0) {
                for (j = 0; j < temps.length; j++) {
                    var imghtml = "<center><img src=\"" + temps[j].src + "\" alt=\"" + temps[j].alt + "\" width=\"" + temps[j].width + "\" height=\"" + temps[j].height + "\" align=\"" + temps[j].align + "\" " + border + "></center>";
                    html = html.replace("#FormatImgID_" + j + "#", imghtml);
                }
            }
            if (iftable.checked) {
                if (tmps != null && tmps.length > 0) {
                    for (k = 0; k < tmps.length; k++) {
                        html = html.replace("#FormatTableID_" + k + "#", tmps[k]);
                    }
                }
            }
            Composition.document.body.innerHTML = html;
        } else {
            var html = processFormatText(tmpText);
            html = html.toUpperCase();
            html = html.replace(/<P>  <\/P>/g, "");
            html = html.replace(/<P><\/P>/g, "");
            sec.pasteHTML(html);
        }
    }
    else
        alert('必须在设计模式下操作!');
}

 主要也就是实现了:段首(P标记)自动空两格、图片自动居中、段与段之间自动空一行之类的功能,那么好了,可以把这些功能集成到富文本编辑器中使用户不至于在两个地方对一篇文章进行排版了,其实这样的代码也很多,比如CKEditor上的插件实现就很多,一搜一大把,比如一个叫做autoformat的。

免责声明:文章转载自《富文本编辑器的一键排版功能》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇foobar2000下播放DSD音乐的插件发现TypeScript中同名interface接口会自动合并的特性下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

ie6,ie7,ie8,FF 浏览器兼容问题

javascript部分1. document.form.item 问题问题:代码中存在 document.formName.item("itemName") 这样的语句,不能在FF下运行解决方法:改用 document.formName.elements["elementName"]2. 集合类对象问题问题:代码中许多集合类对象取用时使用(),IE能接受...

html页面通过http访问mysql数据库中的内容,实现用户登录的功能

需求:   通过html编写用户登录页面,页面内容包括用户名、密码和登录按钮,点击登录后访问login.php文件,使用按钮默认的submit提交用户名和密码,在login.php中访问mysql数据库,查找是否存在用户名和密码均相同的项,然后通过判断$mysqli->num_rows是否为0,为0时表示数据库中没有相同的数据,通过echo向html...

JavaWeb连接SQLServer数据库并完成一个登录界面及其功能设计。

一、JDBC连接SQLserver数据库的步骤:   1.下载SQLserver的JDBC驱动文件——Microsoft JDBC Driver 4.0 for SQL Server   2.例如下载得到的文件是sqljdbc_4.0.2206.100_chs.exe,解压文件,将解压缩文件中的sqljdbc4.jar放到eclipse-workspace...

js调试工具Console命令详解——转

一、显示信息的命令 <!DOCTYPE html> <html> <head> <title>常用console命令</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> &...

HTML、jsp页面中radio,checkbox,select数据回显功能,默认被选中问题

最近常常遇到各种复选框、单选框、下拉框的默认被选中的问题,开始也是绞尽脑汁的想办法,今天写一篇学习总结的博文来写一下学习总结。 单选框(radio)默认被选中: 一、jstl技术进行回显 <input type="radio" name="sex" <f:if test="${c.sex=='男' }">checked="checked"...

Bootstrap 提示工具(Tooltip)插件

一、提示工具(Tooltip)插件根据需求生成内容和标记,默认情况下是把提示工具(tooltip)放在它们的触发元素后面。 有以下两种方式添加提示工具(tooltip): 1、通过data属性:如需添加一个提示工具(tooltip),只需向一个锚标签添加data-toggle="tooltip"即可。锚的 title 即为提示工具(tooltip)的...