是否有可能以某种方式将jquery自动完成实现到ckeditor?创建一个按钮并不是那么难,但有可能将其自动完成硬连线,所以在再次按下按钮之前输入的下一个单词是什么......?
任何远程做过这类事的人都请告诉我。或者,如果这不可能,则自动完成搜索的弹出窗口,然后单击/选择它将所选项添加到ckeditor textarea /当前光标位置(可能作为链接...)?
当然尽量不要超越:)
答案 0 :(得分:4)
为了制作一个建议框,您必须使用上下文菜单作为建议框,请查看链接,了解从此处制作ckeditor插件的基本知识a link
将此添加到config.js,其中autocomplete是插件的名称
config.extraPlugins = 'autocomplete';
然后在ckeditor文件夹中创建以下目录结构/文件
ckeditor->plugins->autocomplete->plugin.js
将以下内容放入plugin.js文件
CKEDITOR.plugins.add('autocomplete',
{
init : function(editor) {
var autocompleteCommand = editor.addCommand('autocomplete', {
exec : function(editor) {
我们需要在文档中创建一个虚拟范围来计算要显示的菜单的当前位置
var dummyElement = editor.document
.createElement('span');
editor.insertElement(dummyElement);
var x = 0;
var y = 0;
var obj = dummyElement.$;
while (obj.offsetParent) {
x += obj.offsetLeft;
y += obj.offsetTop;
obj = obj.offsetParent;
}
x += obj.offsetLeft;
y += obj.offsetTop;
dummyElement.remove();
计算完位置后,我们删除元素并调用方法显示建议(放在上下文菜单中,在下一个函数中配置)
editor.contextMenu.show(editor.document
.getBody(), null, x, y);
}
});
},
以下是编辑器上的侦听器绑定,用于检查当前键是否为#, CKEDITOR.SHIFT + 51是#的键组合
afterInit : function(editor) {
editor.on('key', function(evt) {
if (evt.data.keyCode == CKEDITOR.SHIFT + 51) {
editor.execCommand('autocomplete');
}
});
在ckeditor准备就绪后,将从外部jquery调用reloadSuggetionBox 命令生成菜单
var firstExecution = true;
var dataElement = {};
editor.addCommand('reloadSuggetionBox', {
exec : function(editor) {
if (editor.contextMenu) {
dataElement = {};
editor.addMenuGroup('suggestionBoxGroup');
$.each(Suggestions,function(i, suggestion)
{
var suggestionBoxItem = "suggestionBoxItem"+ i;
dataElement[suggestionBoxItem] = CKEDITOR.TRISTATE_OFF;
editor.addMenuItem(suggestionBoxItem,
{
id : suggestion.id,
label : suggestion.label,
group : 'suggestionBoxGroup',
icon : null,
onClick : function() {
var data = editor.getData();
var selection = editor.getSelection();
var element = selection.getStartElement();
var ranges = selection.getRanges();
ranges[0].setStart(element.getFirst(), 0);
ranges[0].setEnd(element.getFirst(),0);
editor.insertHtml(this.id + ' ');
},
});
});
if(firstExecution == true)
{
editor.contextMenu.addListener(function(element) {
return dataElement;
});
firstExecution = false;
}
}
}
});
delete editor._.menuItems.paste;
},
});
此处“建议”是页面上某处的变量,其中包含一个对象列表,其中包含“id”和“label”,以便在建议中显示。
现在为了配置这些建议,请执行以下jquery代码,在此之后,每当按下“#”时,将显示建议
$('textarea').ckeditor();
CKEDITOR.on( 'instanceReady', function( evt ) {
CKEDITOR.instances.contractData.execCommand('reloadSuggetionBox');
});
这将加载ckeditor(contractData是我的ckeditor实例的名称)并配置插件以显示当前存在于“Suggestions”变量中的建议,只要你需要刷新/更改你需要调用此函数后需要的建议重新加载“建议”变量
CKEDITOR.instances.contractData.execCommand('reloadSuggetionBox');
如果您对此工作有任何疑问,请告诉我。
在我的仓库找到可下载的插件
http://navalgandhi1989.github.io/ckeditor-autocomplete-suggestions-plugin/
答案 1 :(得分:2)