Использование HTML-текст от редактора CKEditor
В моем приложении, в разделе insert news, Я использую подстроку новостного контента для сводки новостей. для получения текста новостного контента от пользователей я использую CKEditor, а для сводки новостей я использую метод подстроки, чтобы получить определенную длину новостного контента.но когда я работаю с CKEditor, я получаю текст с HTML-тегами, а не простой текст, и когда я использую метод подстроки, мое резюме новостей становится запутанным! как получить необработанный текст из этого элемента управления?
я читал это, но я не могу использовать метод getText ()
6 ответов:
Сделай вот так
Виола, возьми ту часть обычного текста, которую ты хочешь.//getSnapshot() retrieves the "raw" HTML, without tabs, linebreaks etc var html=CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot(); var dom=document.createElement("DIV"); dom.innerHTML=html; var plain_text=(dom.textContent || dom.innerText); alert(plain_text);UPDATE / EXAMPLE
Добавьте этот javascript
<script type="text/javascript"> function createTextSnippet() { //example as before, replace YOUR_TEXTAREA_ID var html=CKEDITOR.instances.YOUR_TEXTAREA_ID.getSnapshot(); var dom=document.createElement("DIV"); dom.innerHTML=html; var plain_text=(dom.textContent || dom.innerText); //create and set a 128 char snippet to the hidden form field var snippet=plain_text.substr(0,127); document.getElementById("hidden_snippet").value=snippet; //return true, ok to submit the form return true; } </script>В HTML добавьте createTextSnippet в качестве обработчика onsubmit в форму, например
<form action="xxx" method="xxx" onsubmit="createTextSnippet();" />Внутри формы, между
<form>и</form>вставить<input type="hidden" name="hidden_snippet" id="hidden_snippet" value="" />Когда форма отправлена, вы можете получить доступ к hidden_snippet на стороне сервера вместе с остальными полями в форме.
Попробуйте такой код:
CKEDITOR.instances.editor1.document.getBody().getText();Это прекрасно работает для меня. Вы можете проверить это на http://ckeditor.com/demo это не идеально (текст в ячейках таблицы соединяется вместе без пробелов), но может быть достаточно для ваших нужд.
EDIT (20 Dec 2017): демо CKEditor 4 было перемещено в https://ckeditor.com/ckeditor-4/ и использует разные имена редакторов, поэтому новый код для выполнения:
CKEDITOR.instances.ckdemo.document.getBody().getText();Также важно, что он будет работать в " редакторе статей" а в" встроенном редакторе " вам нужно получить текст другого элемента:
CKEDITOR.instances.editor1.editable().getText();
Я использовал эту функцию:
function getPlainText( strSrc ) { var resultStr = ""; // Ignore the <p> tag if it is in very start of the text if(strSrc.indexOf('<p>') == 0) resultStr = strSrc.substring(3); else resultStr = strSrc; // Replace <p> with two newlines resultStr = resultStr.replace(/<p>/gi, "\r\n\r\n"); // Replace <br /> with one newline resultStr = resultStr.replace(/<br \/>/gi, "\r\n"); resultStr = resultStr.replace(/<br>/gi, "\r\n"); //-+-+-+-+-+-+-+-+-+-+-+ // Strip off other HTML tags. //-+-+-+-+-+-+-+-+-+-+-+ return resultStr.replace( /<[^<|>]+?>/gi,'' ); }Вызов функции:
var plain_text = getPlainText(FCKeditorAPI.GetInstance("FCKeditor1").GetXHTML());Я создал эту скрипку для тестирования: http://jsfiddle.net/4etVv/3/
Я лично использую этот метод для сжатия кода и удаления также двойных пробелов и строк:
var TextGrab = CKEDITOR.instances['editor1'].getData(); TextGrab = $(TextGrab).text(); // html to text TextGrab = TextGrab.replace(/\r?\n|\r/gm," "); // remove line breaks TextGrab = TextGrab.replace(/\s\s+/g, " ").trim(); // remove double spaces
Я использую этот метод (нужен jQuery):
var objEditor =CKEDITOR.instances["textarea_id"]; var msg = objEditor.getData(); var txt = jQuery(msg).text().replaceAll("\n\n","\n");Надеюсь, это поможет!
Предполагая, что
editorявляется вашим экземпляром CKEditor (CKEditor.instances.editor1из приведенного выше примера Или если вы используете события, тоevent.editor). Вы можете использовать следующий код для получения обычного текстового содержимого.
editor.ui.contentsElement.getChild(0).getText()По-видимому, CKEditor добавляет элемент "голосовая метка" к фактическому редактируемому контенту. Отсюда
getChild(0).
Comments