Как я могу получить содержимое CKEditor с помощью JQuery?

Я использую CKEditor. Я сохраняю значения формы с помощью ajax, используя методы страницы.

Но содержимое значения CKEditor нельзя сохранить в таблицу.

Я не отсылаю страницу.

Что я могу для этого сделать?


person pegasus    schedule 26.09.2010    source источник


Ответы (15)


Прежде всего, вы должны включить скрипт коннектора ckeditor и jquery на свою страницу,

затем создайте текстовое поле

<textarea name="content" class="editor" id="ms_editor"></textarea>

прикрепите ckeditor к текстовой области, в моем проекте я использую что-то вроде этого:

$('textarea.editor').ckeditor(function() {
        }, { toolbar : [
            ['Cut','Copy','Paste','PasteText','PasteFromWord','-','Print', 'SpellChecker', 'Scayt'],
            ['Undo','Redo'],
            ['Bold','Italic','Underline','Strike','-','Subscript','Superscript'],
            ['NumberedList','BulletedList','-','Outdent','Indent','Blockquote'],
            ['JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock'],
            ['Link','Unlink','Anchor', 'Image', 'Smiley'],
            ['Table','HorizontalRule','SpecialChar'],
            ['Styles','BGColor']
        ], toolbarCanCollapse:false, height: '300px', scayt_sLang: 'pt_PT', uiColor : '#EBEBEB' } );

при отправке получить содержимое, используя:

var content = $( 'textarea.editor' ).val();

Вот и все! :)

person Mike    schedule 26.09.2010
comment
Спасибо за ответ, но я не возвращаю страницу и поэтому не могу получить содержимое ckeditor. Моя проблема в том, как я могу получить содержимое ckeditor без обратной передачи с помощью jquery. - person pegasus; 27.09.2010
comment
Ответ ниже намного лучше. - person Michael Berkompas; 21.06.2012
comment
Я впервые вижу такой отрицательный ответ, как принятый. Невероятный. - person Mathias Lykkegaard Lorenzen; 18.04.2013
comment
Бедняга... Столько слов, -19. - person Zachary Dahan; 07.05.2015

используйте вызов CKEditor.editor.getData() для экземпляра . То есть:

HTML

<textarea id="my-editor">
<input id="send" type="button" value="Send">

JS для CKEditor 4.0.x

$('#send').click(function() {
    var value = CKEDITOR.instances['DOM-ID-HERE'].getData()
    // send your ajax request with value
    // profit!
});

JS для CKEditor 3.6.x

var editor = CKEDITOR.editor.replace('my-editor');

$('#send').click(function() {
    var value = editor.getData();
    // send your ajax request with value
    // profit!
});
person Aeon    schedule 17.12.2010
comment
Это сработало невероятно. Я не мог понять, как и, наконец, нашел это! Спасибо! - person Reaction21; 22.11.2011
comment
Похоже, это не работает с последней версией CKEditor (4.0.2 — 6 марта 2013 г.). Однако ответ ниже: CKEDITOR.instances['DOM-ID-HERE'].getData(); - person Laoujin; 18.03.2013
comment
Спасибо, это определенно помогает! - person eplewis89; 02.05.2013
comment
На самом деле это намного проще. Просто сделайте $('.my-editor-class').val() См. мой ответ ниже. - person Benj; 20.08.2015

Если у вас нет ссылки на редактор, как в ответе Эона, вы также можете использовать форму:

var value = CKEDITOR.instances['my-editor'].getData();
person jverdi    schedule 19.12.2011
comment
+1 вам, сэр. Потратил много времени на поиски того, как получить данные из 1 экземпляра CKEDITOR (где есть X экземпляров, инициализированных через редактор классов). В конце: var strData = CKEDITOR.instances['editor_'+intCounter].getData(); - на случай, если кому-то еще пригодится. - person Adam Tomat; 14.02.2013

var value = CKEDITOR.instances['YourInstanceName'].getData()
 alert( value);

Замените YourInstanceName именем вашего экземпляра, и вы получите желаемые результаты.

person Mukaram    schedule 03.01.2015

У меня были проблемы с тем, что getData() не работал каждый раз, особенно при работе с живым ajax.

Удалось обойти это, запустив:

for(var instanceName in CKEDITOR.instances){
    CKEDITOR.instances[instanceName].updateElement();
}

Затем используйте jquery, чтобы получить значение из текстовой области.

person John Magnolia    schedule 14.01.2014

Теперь, когда существует адаптер jQuery, этот ответ необходимо обновить:

Допустим, вы запустили редактор с помощью $('.ckeditor').ckeditor(opt), тогда вы получите значение с помощью $('.ckeditor').val()

person Benj    schedule 20.08.2015
comment
В то время, когда был задан вопрос, я не думаю, что адаптер jQuery существовал. Спасибо за ответ, хотя, это определенно правильный способ сделать это и в наши дни. - person Aeon; 09.10.2015
comment
Это ничего не делает для меня. Результат пустой строки. - person Martijn; 09.02.2017
comment
Хорошо, он не работает с идентификатором, он работает с начальным селектором :) - person Martijn; 09.02.2017

Спасибо Джону Магнолии. Это моя функция postForm, которую я использую в своих проектах Symfony, и теперь можно работать с CK Editor.

function postForm($form, callback)
{
  // Get all form values
  var values = {};
  var fields = {};

  for(var instanceName in CKEDITOR.instances){
      CKEDITOR.instances[instanceName].updateElement();
  }

  $.each($form.serializeArray(), function(i, field) {
      values[field.name] = field.value;
  });

  // Throw the form values to the server!
  $.ajax({
      type        : $form.attr('method'),
      url         : $form.attr('action'),
      data        : values,
      success     : function(data) {
          callback( data );
      }
  });
person Saman    schedule 04.11.2014

вы можете получить данные следующим образом:

<script>
var data = CKEDITOR.instances.editor1.getData();
// Your code to save "data", usually through Ajax.
</script>

ссылка: http://docs.ckeditor.com/#!/guide/dev_savedata

person Walid azouzi    schedule 07.06.2017

версия 4.8.0

$('textarea').data('ckeditorInstance').getData();
person deVaz    schedule 24.10.2018

Чтобы получить данные ckeditor, вам нужно получить экземпляр ckeditor

HTML-код:

<textarea class="form-control" id="reply_mail_msg" name="message" rows="3" data-form-field="Message" placeholder="" autofocus="" style="display: none;"></textarea>

Javascript:

var ck_ed = CKEDITOR.instances.reply_mail_msg.getData();
person Hemant Kumar    schedule 13.03.2019


я добавляю ckEditor, добавляя DLL в toolBox.
html-код:

<CKEditor:CKEditorControl ID="editor1" runat="server" 
            BasePath="ckeditor" ContentsCss="ckeditor/contents.css" 
            Height="250px" 
            TemplatesFiles="ckeditor/themes/default/theme.js" FilebrowserBrowseUrl="ckeditor/plugins/FileManager/index.html" 
            FilebrowserFlashBrowseUrl="ckeditor/plugins/FileManager/index.html" FilebrowserFlashUploadUrl="ckeditor/plugins/FileManager/index.html" 
            FilebrowserImageBrowseLinkUrl="ckeditor/plugins/FileManager/index.html" FilebrowserImageBrowseUrl="ckeditor/plugins/FileManager/index.html" 
            FilebrowserImageUploadUrl="ckeditor/plugins/FileManager/index.html" 
            FilebrowserUploadUrl="ckeditor/plugins/FileManager/index.html" BackColor="#FF0066" 
                    DialogButtonsOrder="Rtl" 
                    FontNames="B Yekan;B Yekan,tahoma;Arial/Arial, Helvetica, sans-serif; Comic Sans MS/Comic Sans MS, cursive; Courier New/Courier New, Courier, monospace; Georgia/Georgia, serif; Lucida Sans Unicode/Lucida Sans Unicode, Lucida Grande, sans-serif; Tahoma/Tahoma, Geneva, sans-serif; Times New Roman/Times New Roman, Times, serif; Trebuchet MS/Trebuchet MS, Helvetica, sans-serif; Verdana/Verdana, Geneva, sans-serif" 
                    ResizeDir="Vertical" ResizeMinHeight="350" UIColor="#CACACA">dhd fdh</CKEditor:CKEditorControl>

для получения данных о нем.
JQuery:

var editor  = $('textarea iframe html body').html();
    alert(editor); 
person hamed hossani    schedule 05.12.2012
comment
привет, для меня вернуться обратно 'undefined'.i добавлен файл dll. - person hamed hossani; 14.12.2012

Я думаю, что будет лучше, просто сериализуйте свою форму с помощью jquery и ура...

<form id="ajxForm">
  <!-- input elments here -->
  <textarea id="ck-editor" name="ck-editor" required></textarea>
  <input name="text" id="text" type="text" required> 
<form>

и в разделе javascript

CKEDITOR.replace('ck-editor', {
  extraPlugins: 'sourcedialog',
  removePlugins: 'sourcearea'
});

$("form#ajxForm").submit(function(e) {
  e.preventDefault();
  var data = $(this).serialize();
  if (data != '') {
    $.ajax({
      url: 'post.php',
      cache: false,
      type: 'POST',
      data: data,
      success: function(e) {
        setTimeout(function() {
          alert(e);
        }, 6500);
      }
    });
  }
  return;
});
person Amdadol Haque    schedule 03.06.2015

версия 4.6

CKEDITOR.instances.editor.getData()
person Sam NIE    schedule 09.02.2017
comment
хотя ответ может быть точным, трудно понять, почему это ответ. Пожалуйста, добавьте краткое объяснение для пользы сообщества - person blurfus; 09.02.2017
comment
Добро пожаловать в переполнение стека :-) Пожалуйста, посмотрите Как ответить. Вы должны предоставить некоторую информацию, почему ваш код решает проблему. Ответы, содержащие только код, бесполезны для сообщества. - person JimHawkins; 09.02.2017

Простой способ получить текст внутри редактора или его длину :)

 var editorText = CKEDITOR.instances['<%= your_editor.ClientID %>'].getData();
 alert(editorText);

 var editorTextLength = CKEDITOR.instances['<%= your_editor.ClientID %>'].getData().length;
 alert(editorTextLength);
person t..    schedule 13.06.2018

Используя Pure Vanilla Javascript/Jquery или любую библиотеку javascript:

Если у вас загружен Ckeditor в текстовую область ниже:

 <textarea name="editor1" id="editor1"></textarea>

Затем вы можете получить содержимое внутри текстовой области, как показано ниже:

var txtNotes = document.getElementsByClassName('ck-content')[0].innerHTML;
person Diwas Poudel    schedule 10.09.2020