富文本编辑器小结

现状

近来由于公司营业上的需求,我们须要一个本身的编辑器来编写我们获得APP内里的定阅文章,为何须要本身的编辑器,重要是由于用第三方的编辑器很难完成公司定制化的需求,比方:排版上我们想要更好看点,一致,由于各个定阅专栏编辑的人不一样,轻易形成种种差别的审美差别,解决计划有2种:

  1. 采纳一个可定制化的第三方富文本编辑器,然后本身写插件来满足本身的请求。

  2. 本身写一个富文本编辑器。

末了和团队的人探讨决议,本身撸一个吧,由于运用第一种计划,依赖于他人的开源插件,老是不太宁神,而且畏惧到时刻有什么题目,要研讨他们的源码,那就跟本身写差不多若干,而且我们本身撸一个,并不是要写一个异常通用,能够开源的富文本编辑器,我们只须要针对我们本身营业,写一个定制化相符公司运用的编辑器就好了。综上,我最先了此次异常兴奋(坑爹)的编辑器之旅!!!

先看效果图,如图所示,假如有定阅了我们获得APP内里专栏文章的,能够对比下,如今和8月的文章就可以看出来了。

《富文本编辑器小结》

无处不在的坑

起首web端的富文本编辑器,基础敕令参照documen敕令文档,兼容性的题目就不说了,人人都晓得,重要说说一些开发了才晓得的坑。

div照样p

可编辑形式下(是不是支撑可编辑能够用[HTMLElement.isContentEditable
](https://developer.mozilla.org… 敕令来检察的),假如内部没有P标签这个初始化标签,编写的时刻,换行给你增加的标签将会是div,如图所示:
《富文本编辑器小结》

这里就已不太相符我们请求了,不想要种种div标签在文本表面,语义化来讲,我们应当用p标签才对。

解决计划: 初始化增加一个p标签,而且内里到场一个br
<p><br></p>

删除也要战战兢兢

这个坑跟第一个一样的缘由,只是表现形式差别,假如你最先删除你的编辑文本,删除完以后,悉数可编辑元素,就变成空了,意味着,又没有初始化的p标签,那末你在增加笔墨的时刻,就会跟上面的题目一样了。

解决计划:监听删除行动,推断内部照样否有子元素,没有初始化p标签

行内标签很有特性

增加文本须要的行内标签,比方: bold,italic,underline,subscript等等,能够恣意增加和作废,一般来讲没有任何题目,须要注重的是,你不能随便变动相干标签的css特别款式,炒个栗子:bold在chrome内里增加一个b标签,浏览器款式,font-weight:bolder;,假如你本身css给覆蓋掉,变成 font-weight: normal;,那末再次点击,应当作废的时刻,不会胜利的。缘由我没有找到文档,据我推想,由于是作废的时刻,推断前提为是不是有相干敕令的css款式,并不是纯真的笔墨外部标签称号。

formatBlock跟你说,不是一切的牛奶都是特仑苏!

运用formatBlock来增加或许替换笔墨的外标签时,要特别注重–BLOCKQUOTE这个东东,
document.execCommand('formatBlock', false, "<blockquote>"),它能增加或许替换,然则要作废他的时刻,就不起作用了。

解决计划: 在实行代码的时刻,多加一个推断,推断当前选中笔墨的外标签是什么,再决议是须要实行什么敕令。

let Range = document.getSelection().getRangeAt(0),
     formatName = Range.commonAncestorContainer.parentElement.nodeName === 'BLOCKQUOTE' ? 'P' : 'BLOCKQUOTE';
document.execCommand('formatBlock', false, formatName)

removeFormat并不是全能的

清晰花样这个敕令,重要会清撤除附带在标签上的内联款式,也就是style,然则不会消灭class称号,这意味着,从外部粘贴过来的文本,假如不幸的ClassName和你的css内里的ClassName反复了,就会带上你的css款式。而且也不会清晰内里内联元素标签,什么意思呢?就是span都照样存在的,从道理上来讲这个不影响末了的显现,但没有必要须要这些个标签,很轻易发生其他的题目。

解决计划:实行清晰花样操纵的时刻,多加一些操纵,把无用的款式,标签和ClassName悉数干掉。(此处必须有杀气!)

其他

至于其他的许多敕令(indent,fontSize,fontColor…),我这里没有运用,也不晓得是不是有坑,缘由是前面说到的款式一致,保证雅观,不支撑内联款式,由一致的css款式衬着。

    原文作者:乖小鬼YQ
    原文地址: https://segmentfault.com/a/1190000007403109
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞