Quill—心目中的最佳富文本編輯器

由于長(zhǎng)時(shí)間使用 UEditor 編輯器径缅,再加上 UEditor 界面實(shí)在不夠清新浪漠,不符合我的審美鸵膏,遂決定給網(wǎng)站后臺(tái)換一個(gè)富文本編輯器硕并,經(jīng)過(guò)幾天的尋找以及試用法焰,終于找到了符合我這強(qiáng)迫癥的最完美的編輯器,它就是——Quill鲤孵。

幾大編輯器比較

UEditor

鏈接:https://ueditor.baidu.com/website/

這款編輯器應(yīng)該很多人都用過(guò)吧壶栋,說(shuō)實(shí)話,它的功能在我看來(lái)是最全面普监、最強(qiáng)大的贵试,不僅包含豐富的文本樣式編輯,還有強(qiáng)大的表格編輯功能凯正,插入功能毙玻,而且接入十分簡(jiǎn)單,可惜的是官方早就不再更新了廊散,所以樣式看起來(lái)不那么“主流”桑滩,不過(guò)這個(gè)就見(jiàn)仁見(jiàn)智了,并不影響它成為一款優(yōu)秀的富文本編輯器允睹。

Simditor

鏈接:https://simditor.tower.im/

這款編輯器滿足基本的需求运准,但插件不是很多,樣式比較清新好看缭受,對(duì)于我來(lái)說(shuō)少了字體顏色的設(shè)置胁澳,代碼高亮也不甚理想,要求不高的可以使用這款米者。

wangEditor

鏈接:http://www.wangeditor.com/

這款編輯器是國(guó)內(nèi)一個(gè)開(kāi)發(fā)者開(kāi)源的韭畸,功能基本足夠宇智,樣式主流,但文檔中說(shuō)明了“從編輯器中獲取的 html 代碼是不包含任何樣式的純 html”胰丁,就是說(shuō)需要自己編寫樣式随橘,但相對(duì)來(lái)說(shuō)靈活多變,可以自己實(shí)現(xiàn)多皮膚功能

CKEditor

鏈接:https://ckeditor.com

這款也算中規(guī)中矩吧锦庸,有基本功能机蔗,但看了一圈還是沒(méi)有我需要的字體顏色跟代碼高亮功能,但值得一提的是酸员,它有行內(nèi)編輯功能蜒车,編輯內(nèi)容更加直觀讳嘱,仿佛是在編輯網(wǎng)頁(yè)一樣幔嗦,這個(gè)功能還是挺強(qiáng)大的。

TinyMCE

鏈接:https://www.tiny.cloud/

這款編輯器很漂亮沥潭,功能也非常多邀泉,編輯出的文章樣式也十分美觀,代碼高亮功能實(shí)現(xiàn)的也可以钝鸽,但它卻是我最不喜歡的一款汇恤,因?yàn)槲矣X(jué)得它太重了,類似于word的菜單功能雖多拔恰,但隱藏較深因谎,操作步驟變多,這很影響編輯文章的速度以及注意力颜懊,當(dāng)然最常用的幾個(gè)功能還是顯式财岔,所以就見(jiàn)仁見(jiàn)智吧。

Froala

鏈接:https://www.froala.com/

這款被很多人稱為史上最NB的編輯器河爹,的確它功能強(qiáng)大匠璧,插件豐富,可自定義主題和插件咸这,我簡(jiǎn)單使用了一下夷恍,沒(méi)有我需要的代碼高亮,所以果斷放棄媳维,或許它可以自定義配置酿雪,但我沒(méi)有深究。

Quill

鏈接:https://quilljs.com/

尋尋覓覓侄刽,尋尋覓覓指黎,終于找到你,最符合我需求的編輯器——quill唠梨,樣式不用多說(shuō)袋励,也是主流的黑白清新風(fēng),美觀,功能上雖然不是很多茬故,甚至還沒(méi)有表格盖灸,網(wǎng)絡(luò)圖片上傳(可以通過(guò)復(fù)制網(wǎng)絡(luò)圖片并黏貼解決)等功能,但它的代碼高亮是最完美的磺芭,因?yàn)樗旧砭椭С至?code>hignlight.js赁炎,同樣支持行內(nèi)編輯模式,可自定義钾腺,總的來(lái)說(shuō)徙垫,這是一款優(yōu)點(diǎn)多但缺點(diǎn)同樣明顯的編輯器,但卻完美契合我的需求放棒,所以我比較喜愛(ài)這款姻报。

Quill 的使用

快速開(kāi)始

開(kāi)始構(gòu)建一個(gè)quill編輯項(xiàng)目包括引入文件、創(chuàng)建自定義工具欄间螟、創(chuàng)建編輯容器以及初始化這幾部分吴旋。

<!-- 引入css文件 -->
<link  rel="stylesheet">

<!-- 自定義編輯器工具欄 -->
<div id="toolbar">
  <button class="ql-bold">Bold</button>
  <button class="ql-italic">Italic</button>
</div>

<!-- 創(chuàng)建編輯容器 -->
<div id="editor">
  <p>Hello World!</p>
</div>

<!-- 引入js文件 -->
<script src="https://cdn.quilljs.com/1.0.0/quill.js"></script>

<!-- 初始化編輯器,snow主題 -->
<script>
  var editor = new Quill('#editor', {
    modules: { toolbar: '#toolbar' },
    theme: 'snow'
  });
</script>

quill主要資源介紹

<!-- 主要的庫(kù)文件厢破,js -->
<script src="http://cdn.quilljs.com/1.3.6/quill.js"></script>
<script src="http://cdn.quilljs.com/1.3.6/quill.min.js"></script>

<!-- css文件荣瑟,有兩個(gè)主題,snow和bubble -->
<link  rel="stylesheet">
<link  rel="stylesheet">

<!-- 沒(méi)有主題的核心構(gòu)建, 不必要的模塊(使用不需要引入) -->
<link  rel="stylesheet">
<script src="http://cdn.quilljs.com/1.3.6/quill.core.js"></script>

以上就是quill的庫(kù)文件了摩泪,但要實(shí)現(xiàn)代碼高亮的話需要自己引入highlight.js庫(kù)笆焰,只需要引入就可以了,不需要額外的配置见坑,所以完整的引入嚷掠,以我的項(xiàng)目為參考:

// 代碼高亮采用dracula主題,可去highlight官網(wǎng)配置
<link  rel="stylesheet">
// 采用snow主題
<link  rel="stylesheet">


// highlight.js的主要js文件
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/9.15.6/highlight.min.js"></script>
// quill的主要js文件
<script src="https://cdn.quilljs.com/1.3.6/quill.min.js"></script>

創(chuàng)建編輯器

quill的使用也很簡(jiǎn)單鳄梅,引入上面的資源之后就可以開(kāi)始創(chuàng)建編輯器了叠国。

首先需要定義編輯器的工具欄,有兩種方式戴尸,一種是直接html創(chuàng)建粟焊,一種是通過(guò)js創(chuàng)建,相對(duì)來(lái)說(shuō)html更加直觀一些孙蒙,這里就簡(jiǎn)單的放兩個(gè)示例介紹一下项棠。

通過(guò)一個(gè)js數(shù)組來(lái)配置初始化容器:

var toolbarOptions = [
  ['bold', 'italic', 'underline', 'strike'],        // 切換按鈕
  ['blockquote', 'code-block'],

  [{ 'header': 1 }, { 'header': 2 }],               // 用戶自定義按鈕值
  [{ 'list': 'ordered'}, { 'list': 'bullet' }],
  [{ 'script': 'sub'}, { 'script': 'super' }],      // 上標(biāo)/下標(biāo)
  [{ 'indent': '-1'}, { 'indent': '+1' }],          // 減少縮進(jìn)/縮進(jìn)
  [{ 'direction': 'rtl' }],                         // 文本下劃線

  [{ 'size': ['small', false, 'large', 'huge'] }],  // 用戶自定義下拉
  [{ 'header': [1, 2, 3, 4, 5, 6, false] }],

  [{ 'color': [] }, { 'background': [] }],          // 主題默認(rèn)下拉,使用主題提供的值
  [{ 'font': [] }],
  [{ 'align': [] }],

  ['clean']                                         // 清除格式
];

var quill = new Quill('#editor', {
  modules: {
    toolbar: toolbarOptions
  },
  theme: 'snow'
});

通過(guò)html來(lái)創(chuàng)建工具欄冰初始化容器:

<div id="toolbar-container">
    <span class="ql-formats">
        <select class="ql-font"></select>
        <select class="ql-size"></select>
    </span>
    <span class="ql-formats">
        <button class="ql-bold"></button>
        <button class="ql-italic"></button>
        <button class="ql-underline"></button>
        <button class="ql-strike"></button>
    </span>
    <span class="ql-formats">
        <select class="ql-color"></select>
        <select class="ql-background"></select>
    </span>
    <span class="ql-formats">
        <button class="ql-script" value="sub"></button>
        <button class="ql-script" value="super"></button>
    </span>
    <span class="ql-formats">
        <button class="ql-header" value="1"></button>
        <button class="ql-header" value="2"></button>
        <button class="ql-blockquote"></button>
        <button class="ql-code-block"></button>
    </span>
    <span class="ql-formats">
        <button class="ql-list" value="ordered"></button>
        <button class="ql-list" value="bullet"></button>
        <button class="ql-indent" value="-1"></button>
        <button class="ql-indent" value="+1"></button>
    </span>
    <span class="ql-formats">
        <button class="ql-direction" value="rtl"></button>
        <select class="ql-align"></select>
    </span>
    <span class="ql-formats">
        <button class="ql-link"></button>
        <button class="ql-image"></button>
        <button class="ql-video"></button>
        <button class="ql-formula"></button>
    </span>
    <span class="ql-formats">
        <button class="ql-clean"></button>
    </span>
</div>
<div id="editor"></div>

<script>
  var quill = new Quill('#editor', {
    modules: {
      toolbar: '#toolbar-container'
    }
  });
</script>

ok挎峦,這樣配置并初始化之后就可以完美展示編輯器了香追,來(lái)看一下成果圖:

獲取內(nèi)容

最終的結(jié)果是我們需要獲取編輯的內(nèi)容并保存到服務(wù)器中,這個(gè)不用多講坦胶,獲取容器的內(nèi)容即可透典,但需要注意的是需要在獲取的內(nèi)容外包上兩個(gè)div容器晴楔,不然展示頁(yè)面不能展示編輯時(shí)所見(jiàn)的效果,同樣峭咒,展示界面也需要引入quill的css以及highlight的css税弃。

// 提交表單
function sub_post() {
    var html = document.querySelector('#editor').children[0].innerHTML;
    html = '<div class="ql-container ql-snow"><div class="ql-editor">'+html+"</div></div>";
    $('[name=content]').val(html);

    $("#submitForm").submit();
}

完美展示,效果賞心悅目

總結(jié)

更多內(nèi)容可以去網(wǎng)上看文檔凑队,有中文翻譯的则果。編輯器種類繁多,蘿卜青菜各有所愛(ài)漩氨,找到適合自己的就好西壮,當(dāng)然有興趣有時(shí)間的其實(shí)所有的編輯器都可以自行擴(kuò)展出更好看的樣式,使用之余別忘了給作者們一個(gè)贊叫惊。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末款青,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子赋访,更是在濱河造成了極大的恐慌可都,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蚓耽,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡旋炒,警方通過(guò)查閱死者的電腦和手機(jī)步悠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)瘫镇,“玉大人鼎兽,你說(shuō)我怎么就攤上這事∠吵” “怎么了谚咬?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)尚粘。 經(jīng)常有香客問(wèn)我择卦,道長(zhǎng),這世上最難降的妖魔是什么郎嫁? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任秉继,我火速辦了婚禮,結(jié)果婚禮上泽铛,老公的妹妹穿的比我還像新娘尚辑。我一直安慰自己,他們只是感情好盔腔,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布杠茬。 她就那樣靜靜地躺著月褥,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓢喉。 梳的紋絲不亂的頭發(fā)上吓坚,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音灯荧,去河邊找鬼礁击。 笑死,一個(gè)胖子當(dāng)著我的面吹牛逗载,可吹牛的內(nèi)容都是我干的哆窿。 我是一名探鬼主播,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼厉斟,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挚躯!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起擦秽,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤码荔,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后感挥,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缩搅,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年触幼,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了硼瓣。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡置谦,死狀恐怖堂鲤,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情媒峡,我是刑警寧澤瘟栖,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站谅阿,受9級(jí)特大地震影響半哟,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奔穿,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一镜沽、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贱田,春花似錦缅茉、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)译打。三九已至,卻和暖如春拇颅,著一層夾襖步出監(jiān)牢的瞬間奏司,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工樟插, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留韵洋,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓黄锤,卻偏偏與公主長(zhǎng)得像搪缨,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子鸵熟,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345