Обходной путь для ошибки вложенности ckeditor - PullRequest
1 голос
/ 13 июня 2011

Какие-либо предложения или обходные пути для этой ошибки?
http://dev.ckeditor.com/ticket/6436
Мне действительно нужно обойти эту ошибку, так как мне нужно удалить целые div с одним backspace в области редактора в CKEditor.но при вставке div становятся вложенными из-за ошибки.Таким образом, удаление отдельных элементов div становится невозможным.

Ответы [ 2 ]

1 голос
/ 28 ноября 2012

Я столкнулся с этой же проблемой, и, к сожалению, ссылка на исправление, сделанное 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.$);
    }
};
1 голос
/ 28 июля 2011

Вот обходной путь, который я наконец-то разработал - http://thecamelcase.com/2011/06/reining-in-the-cursor-in-ckeditor/

...