亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

CKeditor富文本編輯器使用技巧之添加自定義插件的方法

2024-07-21 02:54:18
字體:
來源:轉載
供稿:網友

本文實例講述了CKeditor富文本編輯器使用技巧之添加自定義插件的方法。分享給大家供大家參考,具體如下:

首先就是在CKeditor的plugins目錄下新建一個目錄qchoice:

CKeditor,富文本編輯器,自定義插件

qchoice目錄下的結構如下:

CKeditor,富文本編輯器,自定義插件

然后, images中如下:

CKeditor,富文本編輯器,自定義插件

dialogs中如下:

CKeditor,富文本編輯器,自定義插件

我們先來看plugins.js文件的內容:

(function() {  CKEDITOR.plugins.add("qchoice", {    requires: ["dialog"],    init: function(a) {      a.addCommand("qchoice", new CKEDITOR.dialogCommand("qchoice"));      a.ui.addButton("qchoice", {        label: "qchoice",//調用dialog時顯示的名稱        command: "qchoice",        icon: this.path + "images/qchoice.jpg"//在toolbar中的圖標      });      CKEDITOR.dialog.add("qchoice", this.path + "dialogs/qchoice.js")    }  })})();

再來看qchoice.js文件的內容:

CKEDITOR.dialog.add('qchoice', function (editor) { //要和plugin.js 中的command 一致  var escape = function (value) {    return value;  };  return {    title: '', //對話框標題    minWidth: 500, //對話框寬度    minHeight: 600,//對話框高度    contents: [{  //對話框內容      id: 'choice',      name: 'choice',      label: '插入選擇題答案',      title: '插入選擇題答案',      elements: [{        id: 'rdType_1',        type: 'radio', //表單元素類型:單選按鈕        items: [['中國贊','[中國贊]'],['廣告','[廣告]'],['doge','[doge]'],['喵喵','[喵喵]'],['二哈','[二哈]'],['抱抱','[抱抱]'],['哼','[哼]'],['思考','[思考]'],['生病','[生病]'],['偷樂','[偷樂]']]      },      {        id: 'rdType_2',        type: 'radio', //表單元素類型:單選按鈕        items: [['笑cry','[笑cry]'],['饞嘴','[饞嘴]'],['拜拜','[拜拜]'],['右哼哼','[右哼哼]'],['左哼哼','[左哼哼]'],['怒罵','[怒罵]'],['鄙視','[鄙視]'],['笑而不語','[笑而不語]']]      },      {        id: 'rdType_3',        type: 'radio', //表單元素類型:單選按鈕        items: [['害羞','[害羞]'],['費解','[費解]'],['挖鼻','[挖鼻]'],['悲傷','[悲傷]'],['打臉','[打臉]'],['抓狂','[抓狂]'],['哈哈','[哈哈]'],['傻眼','[傻眼]'],['好喜歡','[好喜歡]'],['好愛哦','[好愛哦]']]      },      {        id: 'rdType_4',        type: 'radio', //表單元素類型:單選按鈕        items: [['失望','[失望]'],['good','[good]'],['弱','[弱]'],['耶','[耶]'],['來','[來]'],['握手','[握手]'],['加油','[加油]'],['haha','[haha]'],['拳頭','[拳頭]'],['男孩兒','[男孩兒]']]      },      {        id: 'rdType_5',        type: 'radio', //表單元素類型:單選按鈕        items: [['話筒','[話筒]'],['禮物','[禮物]'],['飛機','[飛機]'],['干杯','[干杯]'],['圍脖','[圍脖]'],['鐘','[鐘]'],['肥皂','[肥皂]'],['浪','[浪]'],['女孩兒','[女孩兒]'],['照相機','[照相機]']]      },      {        id: 'rdType_6',        type: 'radio', //表單元素類型:單選按鈕        items: [['熊貓','[熊貓]'],['喜','[喜]'],['綠絲帶','[綠絲帶]'],['威武','[威武]'],['弗萊見錢眼開','[弗萊見錢眼開]'],['看漲','[看漲]'],['看跌','[看跌]'],['奧特曼','[奧特曼]'],['兔子','[兔子]']]      }      ,      {        id: 'rdType_7',        type: 'radio', //表單元素類型:單選按鈕        items: [['頂','[頂]'],['米奇喜歡','[米奇喜歡]'],['米奇飛吻','[米奇飛吻]'],['米奇大哭','[米奇大哭]'],['米奇比心','[米奇比心]'],['笑哈哈','[笑哈哈]'],['羞嗒嗒','[羞嗒嗒]'],['憧憬','[憧憬]'],['酷','[酷]']]      }      ,      {        id: 'rdType_8',        type: 'radio', //表單元素類型:單選按鈕        items: [['月亮','[月亮]'],['圍觀','[圍觀]'],['蛋糕','[蛋糕]'],['微風','[微風]'],['音樂','[音樂]'],['豬頭','[豬頭]'],['鮮花','[鮮花]'],['太陽','[太陽]'],['Aloha','[Aloha]'],['贊啊','[贊啊]'],['求關注','[求關注]']]      }      ,      {        id: 'rdType_9',        type: 'radio', //表單元素類型:單選按鈕        items: [['哈欠','[哈欠]'],['淚','[淚]'],['怒','[怒]'],['閉嘴','[閉嘴]'],['疑問','[疑問]'],['白眼','[白眼]'],['吐','[吐]'],['黑線','[黑線]'],['委屈','[委屈]'],['下雨','[下雨]'],['傷心','[傷心]']]      }      ,      {        id: 'rdType_10',        type: 'radio', //表單元素類型:單選按鈕        items: [['作揖','[作揖]'],['星星','[星星]'],['半星','[半星]'],['空星','[空星]'],['草泥馬','[草泥馬]'],['浮云','[浮云]'],['沙塵暴','[沙塵暴]'],['給力','[給力]'],['骷髏','[骷髏]'],['最右','[最右]']]      }      ,      {        id: 'rdType_11',        type: 'radio', //表單元素類型:單選按鈕        items: [['太開心','[太開心]'],['擠眼','[擠眼]'],['衰','[衰]'],['感冒','[感冒]'],['可憐','[可憐]'],['汗','[汗]'],['色','[色]'],['可愛','[可愛]'],['錢','[錢]'],['ok','[ok]'],['NO','[NO]'],['蠟燭','[蠟燭]']]      }      ,      {        id: 'rdType_12',        type: 'radio', //表單元素類型:單選按鈕        items: [['吃狗糧','[吃狗糧]'],['蟻人','[蟻人]'],['黃蜂女','[黃蜂女]'],['吃瓜','[吃瓜]'],['允悲','[允悲]'],['壞笑','[壞笑]'],['困','[困]'],['互粉','[互粉]'],['睡','[睡]'],['并不簡單','[并不簡單]']]      }      ,      {        id: 'rdType_13',        type: 'radio', //表單元素類型:單選按鈕        items: [['陰險','[陰險]'],['噓','[噓]'],['嘻嘻','[嘻嘻]'],['愛你','[愛你]'],['吃驚','[吃驚]'],['污','[污]'],['鼓掌','[鼓掌]'],['給你小心心','[給你小心心]'],['心','[心]'],['贊','[贊]']]      }      ,      {        id: 'rdType_14',        type: 'radio', //表單元素類型:單選按鈕        items: [['微笑','[微笑]'],['偷笑','[偷笑]'],['舔屏','[舔屏]'],['親親','[親親]'],['攤手','[攤手]'],['跪了','[跪了]'],['暈','[暈]'],['米奇愛你','[米奇愛你]'],['帶著微博去旅行','[帶著微博去旅行]']]      }]    }],    onOk: function () { //點擊確定按鈕出發onOK事件。以下代碼主要目的是構造一個select下拉框      qtype_1 = this.getValueOf('choice', 'rdType_1');      qtype_2 = this.getValueOf('choice', 'rdType_2');      qtype_3 = this.getValueOf('choice', 'rdType_3');      qtype_4 = this.getValueOf('choice', 'rdType_4');      qtype_5 = this.getValueOf('choice', 'rdType_5');      qtype_6 = this.getValueOf('choice', 'rdType_6');      qtype_7 = this.getValueOf('choice', 'rdType_7');      qtype_8 = this.getValueOf('choice', 'rdType_8');      qtype_9 = this.getValueOf('choice', 'rdType_9');      qtype_10 = this.getValueOf('choice', 'rdType_10');      qtype_11 = this.getValueOf('choice', 'rdType_11');      qtype_12 = this.getValueOf('choice', 'rdType_12');      qtype_13 = this.getValueOf('choice', 'rdType_13');      qtype_14 = this.getValueOf('choice', 'rdType_14');      rtn = "";      if(qtype_1 != null){        rtn += qtype_1;      }      if(qtype_2 != null){        rtn += qtype_2;      }      if(qtype_3 != null){        rtn += qtype_3;      }      if(qtype_4 != null){        rtn += qtype_4;      }      if(qtype_5 != null){        rtn += qtype_5;      }      if(qtype_6 != null){        rtn += qtype_6;      }      if(qtype_7 != null){        rtn += qtype_7;      }      if(qtype_8 != null){        rtn += qtype_8;      }      if(qtype_9 != null){        rtn += qtype_9;      }      if(qtype_10 != null){        rtn += qtype_10;      }      if(qtype_11 != null){        rtn += qtype_11;      }      if(qtype_12 != null){        rtn += qtype_12;      }      if(qtype_13 != null){        rtn += qtype_13;      }      if(qtype_14 != null){        rtn += qtype_14;      }      if (rtn != "") {        rtns = "<span>"+rtn+"</span>";        editor.insertHtml(rtns);      }      else {        return false;      }    }  };});function htmlEncode(str) {  var temp = document.createElement("div");  (temp.textContent != null) ? (temp.textContent = str) : (temp.innerText = str);  var output = temp.innerHTML;  temp = null;  return output;}

之后就是config.js配置文件的內容了:

/** * @license Copyright (c) 2003-2017, CKSource - Frederico Knabben. All rights reserved. * For licensing, see LICENSE.md or http://ckeditor.com/license */CKEDITOR.editorConfig = function( config ) {  config.toolbarGroups = [    { name: 'clipboard',  groups: [ 'clipboard', 'undo' ] },    { name: 'editing',   groups: [ 'find', 'selection', 'spellchecker' ] },    { name: 'links' },    { name: 'insert' },    { name: 'forms' },    { name: 'tools' },    { name: 'document',  groups: [ 'mode', 'document', 'doctools' ] },    { name: 'others' },    '/',    { name: 'basicstyles', groups: [ 'basicstyles', 'cleanup' ] },    { name: 'paragraph',  groups: [ 'list', 'indent', 'blocks', 'align', 'bidi' ] },    { name: 'styles' },    { name: 'colors' },    { name: 'about' },    { name: 'extent', items: ["qchoice"] }  ];  config.toolbar_Full = [    ['Source','-','Save','NewPage','Preview','-','Templates'],    ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print','SpellChecker', 'Scayt'],    ['Undo','Redo','-','Find','Replace','-','SelectAll','RemoveFormat'],    ['Form', 'Checkbox', 'Radio', 'TextField', 'Textarea', 'Select','Button', 'ImageButton', 'HiddenField'],    '/',    ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],    ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],    ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],    ['Link','Unlink','Anchor'],    ['Image','Flash','Table','HorizontalRule','Smiley','SpecialChar','PageBreak'],    '/',    ['Styles','Format','Font','FontSize'],    ['TextColor','BGColor'],    ["qchoice"]  ];  config.image_previewText=' ';  config.filebrowserImageUploadUrl = 'uploadFiles';  // config.extraPlugins = 'justify';  config.extraPlugins += (config.extraPlugins ? ',justify' : 'justify');  config.extraPlugins += (config.extraPlugins ? ',qchoice' : 'qchoice');  // config.extraPlugins="linkbutton";  //  // config.extraPlugins="ilink";  //  // config.extraPlugins="ijuzi";  // config.extraPlugins="iti";  config.removeButtons = 'Underline,Subscript,Superscript';  // Set the most common block elements.  config.format_tags = 'p;h1;h2;h3;pre';  // Simplify the dialog windows.  config.removeDialogTabs = 'image:advanced;link:advanced';  config.image_previewText=' ';  config.entities = false;};

好啦,到這里,自定義插件就算是放入成功了。咱們自定義的插件主要的邏輯結構就是在qchoice.js文件中,可以改變它的內容,來實現不同的功能。

好啦,本次記錄就到這里了。

希望本文所述對大家JavaScript程序設計有所幫助。


注:相關教程知識閱讀請移步到編輯器頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美成人精品不卡视频在线观看| 欧美一区三区三区高中清蜜桃| 成人免费在线网址| 亚洲欧美日韩精品久久| 亚洲网在线观看| 久久国产一区二区三区| 91在线无精精品一区二区| 国产精品视频中文字幕91| 精品一区二区三区四区在线| 国产精品久久久久久av| 欧美黄色性视频| 91视频-88av| 最近2019年日本中文免费字幕| 亚洲国产中文字幕在线观看| 亚洲成人av片在线观看| 国产在线日韩在线| 91av在线影院| 国产欧美婷婷中文| 欧美一区二区视频97| 日本91av在线播放| 久久精品一区中文字幕| 77777亚洲午夜久久多人| 2019日本中文字幕| 欧美激情一区二区三级高清视频| 日韩高清电影免费观看完整版| 九九热精品视频国产| 国产精自产拍久久久久久| 综合136福利视频在线| 精品国产鲁一鲁一区二区张丽| 亚洲欧美一区二区三区四区| 在线成人激情视频| 一区二区三欧美| 富二代精品短视频| 亚洲激情视频在线| 亚洲一区二区三区成人在线视频精品| 久久99久久99精品免观看粉嫩| 欧美日韩久久久久| 国产一区二区三区精品久久久| 欧美一区二区三区……| 午夜精品一区二区三区视频免费看| 亚洲免费电影在线观看| 亚洲综合中文字幕在线| 亚洲欧美日韩精品久久亚洲区| 黑人巨大精品欧美一区二区一视频| 国内精品视频一区| 国产91精品网站| 久久免费福利视频| 欧美与黑人午夜性猛交久久久| 精品久久久久国产| 国产婷婷97碰碰久久人人蜜臀| 欧美精品videosex极品1| 国产精品激情av在线播放| 国产成人啪精品视频免费网| 日本久久亚洲电影| 91免费高清视频| 欧美高清无遮挡| 国产成人亚洲综合青青| 91在线|亚洲| 17婷婷久久www| 日韩在线精品视频| 91精品久久久久久久久中文字幕| 成人中文字幕+乱码+中文字幕| 亚洲欧美自拍一区| 久久伊人免费视频| 日韩电影免费在线观看| 欧美亚洲第一区| 国产精品成人观看视频国产奇米| 91精品国产综合久久香蕉最新版| 日韩免费黄色av| 68精品国产免费久久久久久婷婷| 最好看的2019的中文字幕视频| 91精品在线一区| 91精品久久久久久久久不口人| 2019av中文字幕| 国产精品96久久久久久又黄又硬| 久久国产天堂福利天堂| 91精品国产91久久久久久最新| 精品激情国产视频| 欧美成人黑人xx视频免费观看| 国产成人精品久久| 日韩免费高清在线观看| 亚洲综合色av| 国产精品久久久久久婷婷天堂| 久久精品国产免费观看| 色诱女教师一区二区三区| 久久久精品在线观看| 久久久综合免费视频| 亚洲精品视频在线观看视频| 亚洲新中文字幕| 一色桃子一区二区| 热久久免费国产视频| 国产精品美女www爽爽爽视频| 亚洲欧美中文另类| 国产久一一精品| 欧美精品福利在线| 精品亚洲一区二区三区在线观看| 91美女高潮出水| 琪琪亚洲精品午夜在线| 国产精品91视频| 91精品久久久久久久久久久久久久| 久久精品成人欧美大片古装| 亚洲免费一级电影| 国产欧美日韩免费看aⅴ视频| 成人情趣片在线观看免费| 久久精品免费播放| 国产精品日韩电影| 成人综合网网址| 国产日韩欧美日韩| 日韩精品在线免费播放| 国产精品十八以下禁看| 日本一欧美一欧美一亚洲视频| 精品爽片免费看久久| 激情懂色av一区av二区av| 久久99热精品| 最近中文字幕2019免费| 国产日韩欧美中文在线播放| 国产亚洲精品成人av久久ww| 精品国产网站地址| 亚洲欧美在线免费观看| 中文字幕亚洲综合久久| 精品国产福利视频| 国产成人综合精品在线| 精品露脸国产偷人在视频| 久久亚洲精品视频| 日韩亚洲成人av在线| 成人444kkkk在线观看| 91久久久久久久久久| 亚洲曰本av电影| 欧美高清视频一区二区| 全球成人中文在线| 色偷偷偷综合中文字幕;dd| 国产成人久久精品| 久久久久久成人精品| 欧美老少做受xxxx高潮| 一区二区亚洲欧洲国产日韩| 国产精品国内视频| 成人免费网视频| 久久久久久久久国产| 麻豆国产精品va在线观看不卡| 久久久天堂国产精品女人| 亚洲欧美日韩在线高清直播| 2019av中文字幕| 日韩在线视频播放| 色综合色综合久久综合频道88| 欧美美女操人视频| 日本人成精品视频在线| 亚洲色图av在线| 欧美另类极品videosbest最新版本| 亚洲午夜久久久影院| 亚洲欧美国产高清va在线播| 久久影视电视剧凤归四时歌| 国产精品1区2区在线观看| 久久久久免费精品国产| 久久精品电影网| 欧美一区二区色| 精品中文字幕久久久久久| 欧美福利视频网站| 热久久免费国产视频| 欧美最猛性xxxxx免费| 欧美怡春院一区二区三区| 久久影视电视剧免费网站清宫辞电视| 国产一区二区免费| 欧美亚洲免费电影| 国产91色在线||