Я пытаюсь создать плагин, который работает аналогично функции тегирования здесь, в переполнении стека.Плагин добавляет событие onchange к редактору и затем проверяет данные, чтобы увидеть, ввел ли пользователь тег, и заменяет любые найденные теги на div.
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);
}
}
});
Проблема заключается в том, когда я вызываю setData событие changeснова запускается и event.editor.getData () возвращает HTML, прежде чем я вызвал setData.Событие изменения запускается до того, как данные действительно были установлены?Есть внутренняя опция, которую я попытался установить в значение true, но данные не обновляются.