美文网首页工作生活
UEditor过滤粘贴板格式

UEditor过滤粘贴板格式

作者: Yuhoo | 来源:发表于2019-07-02 11:41 被阅读0次

    写在前面
    最近接了一个后台管理系统的需求,需求描述是富文本编辑器仅保留:加粗/加斜/下划线/删除线/居中/居左/居右这几个按钮,而且粘贴过来的内容自动过滤掉除以上格式的样式,图片、链接等直接删除。

    UEditor部署

    下载UEditor源码,解压后创建html文件,代码如下

    <!DOCTYPE HTML>
    <head>
        <meta charset="UTF-8">
        <title>ueditor demo</title>
    </head>
    <body>
        <div id="container"></div>
        <script type="text/javascript" src="ueditor.config.js"></script><!-- 配置文件 -->
        <script type="text/javascript" src="ueditor.all.js"></script><!-- 编辑器源码文件 -->
        <script type="text/javascript">
            var ue = UE.getEditor('container'); // 实例化编辑器 
        </script>
    </body>
    </html>
    

    UEditor定制工具栏图标

    在ueditor.config.js中可以使用官网接口对工具栏按钮进行自定义配置,隐藏无用的按钮。
    根据需求,配置如下

    toolbars: [[
      'bold ', 'italic ', 'underline', 'strikethrough ', '|' , 'fontsize ', 'forecolor ', '|' , 
      'justifyleft', 'justifycenter', 'justifyright', '|', 'link ', 'unlink', '|', 'removeformat', '|' 
    ]]
    

    过滤粘贴板格式

    1、了解过滤配置

    前端配置选项中有filterTxtRules // 纯文本粘贴模式下的过滤规则,可以自定义粘贴板中内容

    2、了解编辑器模拟的节点类uNodeAPI

    在过滤规则中不能直接操作dom元素,智能使用uNode类给API才能完成过滤样式操作

    方法 描述
    innerHTML() 获取节点的html内容
    innerHTML(String htmlstr) 设置节点的html内容
    removeChild 从当前节点的子节点列表中,移除节点
    getAttr(String attrName) 获取当前节点所代表的元素属性,即获取attrs对象下的属性值
    setAttr(String attrName, * attrVal) 设置当前节点所代表的元素属性,即设置attrs对象下的属性值
    getStyle(String name) 根据样式名称,获取节点的样式值
    setStyle(String name, String val) 给节点设置样式
    3、具体实现代码如下
    ...
    ,filterTxtRules: function() {
      function delDom(node) { // 如果是图片、超链接 直接删除
        node.parentNode.removeChild(node, node.innerText())
      }
      function transP(node) { // 清除样式
        var html = node.innerHTML().replace(/(&nbsp;)+/i, '&nbsp;');
        node.innerHTML(html);
        var style = getStyle(node);
        node.setAttr('style', style.join(';'));
      }
      function getStyle(node) { // 保留filterStyle中的样式
        var style = [];
        var filterStyle = ['font-weight', 'font-style', 'text-decoration', 'color', 'text-align'];
        for (var i = 0, len = filterStyle.length; i < len; i++) {
          if (node.getStyle(filterStyle[i])) {
            style.push(filterStyle[i] + ': ' + node.getStyle(filterStyle[i]));
          }
        }
        return style;
      }
      return {
        // 黑名单,以下标签及其子节点都会被过滤掉
        '-': 'script style object iframe embed input select',
        'a': delDom,  // 直接删除及其字节点内容
        'img': delDom,
        'p': transP,
        'div': transP,
        'span': transP,
        'h1': transP,
        'h2': transP,
        'h3': transP,
        'h4': transP,
        'h5': transP,
        'h6': transP,
        'b': { '$': {} }, // $:{} 表示不保留任何属性
        'br': { '$': {} },
        'i': { '$': {} },
        'li': { '$': {} },
        'td': { '$': {} },
        'ul': { '$': {} },
      }
    }()
    ...
    
    结果图

    相关文章

      网友评论

        本文标题:UEditor过滤粘贴板格式

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