Я столкнулся с этой же проблемой, и, к сожалению, ссылка на исправление, сделанное ghostCoder, больше не доступна.
В дополнение к проблеме с вложенными div-файлами, мы принудительно вставили простой текст (поэтому данные вставляютсяпростой текст, если не используется «вставить из слова») и мы используем div в качестве нашего enterMode.В вставленных данных разрывы строк были заменены натеги, в то время как мы хотели, чтобы каждая строка была оберткой внутри элемента.
Так мы решили проблему.Вы должны знать, что мы не изменили параметр конфигурации autoParagraph , поэтому по умолчанию он имеет значение true, и я не рекомендую отключать его на уровне конфигурации.Я постараюсь хорошо прокомментировать это решение, чтобы вы поняли, что на самом деле здесь делается.
config.on.instanceReady = function(e) {
var enterMode = e.editor.config.enterMode, elem = 'div';
if(enterMode === CKEDITOR.ENTER_P) {
elem = 'p';
}
// We didn't encounter any issues when using br as enterMode so
// continue only if enterMode is div or p element
if(enterMode === CKEDITOR.ENTER_DIV || enterMode === CKEDITOR.ENTER_P) {
// Disable autoParagraph in initialization to avoid nested div issue.
// When autoParagraph is manipulated this way it will still be active
// later on so if you write some inline content in source mode it
// will be properly wrapped inside <p> or <div> element.
e.editor.config.autoParagraph = false;
// Handle paste event to get rid of <br /> line breaks issue
e.editor.on('paste', function(evt) {
var data = '';
// Stop event, handle everything here manually
evt.stop();
// Get data either from event's text or html property
if(evt.data.text) {
// Remove HTML markup from pasted data
data = evt.data.text.replace(/(<([^>]+)>)/ig, '');
// Replace all line breaks with </div><div> or </p><p> markup
// And wrap the whole content inside <div> or <p> element
data = '<' + elem + '>'
+ data.replace(/\r\n|\r|\n/g, '</' + elem + '><' + elem + '>')
+ '</' + elem + '>';
} else {
// If data was not pasted as plain text just
// get data as is from event's html property
data = evt.data.html;
}
// Insert HTML data to editor
evt.editor.insertHtml(data);
// Fire afterPaste manually as we have stopped the event
// and afterPaste wouldn't get triggered otherwise
evt.editor.fire( 'afterPaste' );
}, e.editor.element.$);
}
};