在onchange事件期间,Ckeditor发出调用setData的命令
我正在尝试创建一个插件,其工作原理类似于堆栈溢出上的标记功能。该插件向编辑器添加一个onchange事件,然后检查数据以查看用户是否输入了标记,并用div替换找到的任何标记在onchange事件期间,Ckeditor发出调用setData的命令,ckeditor,ckeditor4.x,Ckeditor,Ckeditor4.x,我正在尝试创建一个插件,其工作原理类似于堆栈溢出上的标记功能。该插件向编辑器添加一个onchange事件,然后检查数据以查看用户是否输入了标记,并用div替换找到的任何标记 CKEDITOR.plugins.add('tagit', { icons: '', init: function (editor) { var tags = ['MyTag'], tokens = []; editor.on('change', fu
CKEDITOR.plugins.add('tagit', {
icons: '',
init: function (editor) {
var tags = ['MyTag'],
tokens = [];
editor.on('change', function (event) {
var tokenUpdated = false;
tokens = tokenize(event.editor.getData());
for (var tokenIndex = 0; tokenIndex < tokens.length; tokenIndex++) {
var token = String(tokens[tokenIndex]);
if (!token.match(/tagit/gmi) && tags.some(function (tag) { return token.indexOf(tag) >= 0; })) {
tokens[tokenIndex] = '<div class="tagit">' + tokens[tokenIndex] + '</div>';
tokenUpdated = true;
}
}
if (tokenUpdated) {
event.editor.setData(tokens.join(''));
}
});
var tokenize = function (data) {
var match = '(<div class="tagit">.*?<\/div>)';
for (var i = 0; i < tags.length; i++) {
match += '|(' + tags[i] + ')';
}
var re = new RegExp(match, "gmi");
return data.split(re);
}
}
});
CKEDITOR.plugins.add('tagit'{
图标:“”,
init:函数(编辑器){
var tags=['MyTag'],
代币=[];
编辑器.on('change',函数(事件){
var=false;
tokens=tokenize(event.editor.getData());
for(var-tokenIndex=0;tokenIndex=0;})){
令牌[tokenIndex]=''+令牌[tokenIndex]+'';
tokenUpdated=true;
}
}
如果(更新){
event.editor.setData(tokens.join(“”));
}
});
var tokenize=函数(数据){
变量匹配='(*?)';
对于(var i=0;i
问题是,当我调用setData时,会再次触发更改事件,event.editor.getData()会在调用setData之前返回html。是否在实际设置数据之前触发更改事件?有一个内部选项,我尝试将其设置为true,但数据似乎没有更新。您正在更改编辑器内容,因此使用
editor.setData
函数调用change
事件是很自然的。TBO我认为您的实现有一个比循环调用更重要的问题——您正在通过正则表达式比较HTML内容。这是一种不好的做法,在实现过程中会遇到更多的问题
此功能不明显,需要处理文档选择,而不仅仅是查询其内容(也是出于性能原因)
但我有一个好消息。使用CKEditor4.10
我们提供了新的插件,可轻松用于创建您所谈论的功能,尤其是textmatch
和textwatcher
。提到的插件将与autocomplete
和提到的插件一起提供。您可以阅读更多关于GH进展的信息:
提到:
自动完成:
4.10
版本设置为6月26日,但可能会更改,请查看更新
发布后,我可以为您的功能提供一些示例实现——但我相信,有了新插件,这将非常简单