CLEditor, вставка содержимого в виде текста в главном окне - PullRequest
2 голосов
/ 28 марта 2012

Я использую CLEditor, http://premiumsoftware.net/cleditor/, для моего текстового редактора. Существует функция «вставить как текст», которая при нажатии на кнопку появляется всплывающее окно с текстовой областью для вставки содержимого и удаления стилей.

То, что я хотел бы сделать, это использовать ту же функциональность, но каждый раз, когда кто-то вставляет в основной текст, это действие выполняется автоматически. Как бы это вызвать?

Я создал JS Fiddle, http://jsfiddle.net/helpinspireme/naubS/,, но не смог вставить туда все JS, поэтому для ссылки на основной файл JS для CLEditor посетите их сайт: http://premiumsoftware.net/cleditor/

Спасибо за вашу помощь.

Ответы [ 2 ]

3 голосов
/ 04 марта 2013

Мне известно, что я не отвечаю на ваш реальный вопрос, но в случае, если ваша настоящая проблема заключается в мусоре, создаваемом пользователем, который пытается вставить текст из Microsoft Office (например, Word), я бы порекомендовалрассмотрим альтернативное решение.

Сам CLEditor может переключаться между iFrame (режим расширенного текста) и текстовой областью (режим источника).Функциональность «Вставить как текст» использует текстовую область, которая не поддерживает форматированный текст сам по себе, поэтому он не допустит мусорный HTML в первую очередь.

Однако, если редактор находится в режиме форматированного текста, онОчень трудно предотвратить вставку пользователем текста из Word (он может использовать обычную кнопку вставки, нажать CTRL-V или даже использовать контекстное меню правой кнопки мыши, которые представляют собой разные события и которые трудно перехватить с помощью javascript).Так что теперь ущерб уже нанесен;у вас есть грязный HTML внутри вашего редактора.Поэтому вместо того, чтобы пытаться очистить мусор, создаваемый Word, я реализовал следующую проверку (javascript) после сохранения захваченного ввода:

if(clEditorValue && (clEditorValue.indexOf('<!--') !== -1 || clEditorValue.indexOf('mso-ansi-language') !== -1 ) ) {
  alert('Unable to process text pasted from Word, please use "Paste as text" or modify your input');
  return;
}

Я надеюсь, что этот ответ будет полезен для других людей, пытающихся достичь того же.

0 голосов
/ 08 февраля 2017

При вставке в cleditor редактор забирает все html из источника.В итоге я отредактировал jquery.cleditor.js и добавил функцию связывания в функцию $ doc.click (hidePopups).Я использовал setTimeouts, чтобы позволить тексту заполнить ввод и завершить функцию updateTextArea.

    .bind("paste", function() {
            setTimeout(function() {
                refreshButtons(editor);
                updateTextArea(editor, true);
                //remove any and all html from the paste action
                setTimeout(function() {
                    //clean up the html with removeHtml function
                    $(editor.doc.body).html(removeHtml($(editor.doc.body).html()));

                    //change the input value with new clean string
                    $("#" + editor.$area[0].id).val($(editor.doc.body).html());
                }, 100);
            }, 100);
        })

Я использую приведенную ниже функцию removeHtml, чтобы удалить весь HTML-код из вставленного содержимого.

//remove html altogether
function removeHtml(str) {
    var regex = /(<([^>]+)>)/ig;
    var result = str.replace(regex, "");
    return result;
}

Это решение сейчас в производстве.

...