富文本 —— wangEditor

2020-06-16  本文已影响0人  潇潇剑_易水阁

姗姗来迟的富文本

前序:

一:wangEditor 3.X 的插件扩展方法:

/*
menu - indent
*/
// 构造函数
function Indent(editor) {
    this.editor = editor;
     // 设置菜单的样式,文本,title仅为悬浮时显示名称,各位客官可看需添加
    this.$elem = $('<div class="w-e-menu" title="首行缩进"><i class="w-e-icon-indent-right"></i></div>');
    // 设置操作方式为点击还是选项面板
    this.type = 'click';

    // 当前是否 active 状态
    this._active  = false;
}

// 原型
Indent.prototype = {
    constructor: Indent,
   // 设置点击事件
    onClick: function onClick(e) {
    // 这里必须要注意,在纯文本没有外部元素包裹的时候,这里会把纯文本的父元素获取,
    // 故后面设置的就往往不是你想要的,需要约定俗成,任意一行内容均需要一个元素包裹,  
    // 以便样式控制影响所在行,若想测试这种效果,请使用
    // editor.txt.html('纯文本内容') 、
    // editor.txt.html('<p>带元素的内容</p>') 分别试下
        var $selectionElem = this.editor.selection.getSelectionContainerElem();

    // 这里仅仅使用document.execCommand的缩进操作,至于精准的按当前字体大小以及设置缩进单位的,请自行研究
        $($selectionElem).css('text-indent', '2em');
    },
   // 设置菜单切换状态
    tryChangeActive: function tryChangeActive(e) {
        var editor = this.editor;
        var $elem = this.$elem ;
        if (editor.cmd.queryCommandState('indent')) {
            this._active = true;
            $elem.addClass('w-e-active');
        } else {
            this._active = false;
            $elem.removeClass('w-e-active');
        }
    }
};
MenuConstructors.indent = Indent;
// 覆盖还是修改取决于你自己,要是懒得找,可以外置这些字体设置,毕竟是样式定位
// 需要注意,内置css的 \ 转移符
// 修改的字体base64格式文本,后面省略,具体的看你拿到的字体转换后的base64为准
// 字体格式这边选择woff2,已跟原版不同,具体看自己选择
// 此处仅展示所在位置
@font-face {  font-family: \'w-e-icon\';  src: url(data:application/font-woff2;charset=utf-8;base64...)format(\'woff2\');  font-weight: normal;  font-style: normal;}

// 新增首项缩进的样式,样式代码也来自实际字体编号,切勿直接CV
.w-e-icon-indent-right:before {  content: "\\e80f";}
 // $($selectionElem).css('text-indent', '2em');
 // 获取当前光标所在行的元素
let $selectionElem = this.editor.selection.getSelectionContainerElem()[0];
 // 设置元素内容为前增的特殊空格的字符,注意这里不是敲空格得到的字符
$selectionElem.innerText = '  ' + $selectionElem.innerText;

二:保存后的富文本标签显示的解决方法:

let box = document.createElement("div");
box .innerHTML = text;
editor.txt.html(box .innerText || box .textContent);
//使用完记得回收喔,环保从小事开始
box.remove();
上一篇下一篇

猜你喜欢

热点阅读