Quiero poder devolver el valor del área de texto CKEditor y también escribir mi texto dentro de él.

Usé CKEditor 5 CDN. Primero este mi código para el área de texto funciona bien

<script src="https://cdn.ckeditor.com/ckeditor5/1.0.0-alpha.1/classic/ckeditor.js"></script>

<textarea class="inputStyle" id="editor" name="content" placeholder="Write your email.."></textarea>
<script>ClassicEditor.create(document.querySelector('#editor')).catch( error => { console.error( error );  } ); </script>

Solía obtener los datos del área de texto antes del CKEditor:

var text = $('textarea#editor').val();

Y establecer los datos por:

$('textarea#editor').html("");

Pero estoy perdido ahora? Lo intenté de muchas maneras ... ¿Cuál es la forma correcta?

6
Latifa Khalid 30 oct. 2017 a las 14:19

3 respuestas

La mejor respuesta

Debe obtener o guardar el editor creado y luego usar getData() función. Puede agregar un .then() en la creación para guardar su editor.

    var myEditor;

    ClassicEditor
        .create( document.querySelector( '#editor' ) )
        .then( editor => {
            console.log( 'Editor was initialized', editor );
            myEditor = editor;
        } )
        .catch( err => {
            console.error( err.stack );
        } );

Y luego obtener datos usando

myEditor.getData();
23
Reinmar 25 ene. 2019 a las 11:40

Utilizo otra forma de trabajar con ckEditors.

Lo primero es que no quiero inicializar ckEditor en cada página donde uso Editors.

La segunda cosa es: a veces necesito acceder a ckEditors por nombre.

Entonces, ahí está mi punto de vista:

Añadir a su diseño:

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdn.ckeditor.com/ckeditor5/11.2.0/classic/ckeditor.js"></script>

Úselo en su vista:

<input type="text" name="tbxQuestion" class="ck-classic"/>
<input type="text" name="tbxAnswer1" class="ck-classic-min"/>
<input type="text" name="tbxAnswer2" class="ck-classic-min"/>
<input type="text" name="tbxAnswer3" class="ck-classic-min"/>

Un pequeño css:

.ck-classic {
    display: none;
}

.ck-classic-min {
    display: none;
}

Agregue JS pequeño al diseño (mejor forma de agregar como archivo JS separado):

const ckEditorClassicOptions = {
    toolbar: ['heading', '|', 'bold', 'italic', 'bulletedList', 'numberedList', 'blockQuote', 'link', 'insertTable', 'undo', 'redo'],
    heading: {
        options: [
            { model: 'paragraph', title: 'Параграф' },
            //{ model: 'heading1', view: 'h1', title: 'Heading 1' },
            { model: 'heading2', view: 'h2', title: 'Заголовок 2' },
            { model: 'heading3', view: 'h3', title: 'Заголовок 3' },
            { model: 'heading4', view: 'h4', title: 'Заголовок 4' },
            { model: 'heading5', view: 'h5', title: 'Заголовок 5' }
        ]
    }
};

const ckEditorClassicOptionsMin = {
    toolbar: ['bold', 'italic']
};

var allCkEditors = [];
$(document).ready(function() {
    // Initialize All CKEditors
    allCkEditors = [];

    var allHtmlElements = document.querySelectorAll('.ck-classic');
    for (var i = 0; i < allHtmlElements.length; ++i) {
        ClassicEditor
            .create(allHtmlElements[i], ckEditorClassicOptions)
            .then(editor => {
                allCkEditors.push(editor);
            })
            .catch(error => {
                console.error(error);
            });
    }

    allHtmlElements = document.querySelectorAll('.ck-classic-min');
    for (var j = 0; j < allHtmlElements.length; ++j) {
        ClassicEditor
            .create(allHtmlElements[j], ckEditorClassicOptionsMin)
            .then(editor => {
                allCkEditors.push(editor);
            })
            .catch(error => {
                console.error(error);
            });
    }

});

function ckEditor(name) {
    for (var i = 0; i < allCkEditors.length; i++) {
        if (allCkEditors[i].sourceElement.id === name) return allCkEditors[i];
    }

    return null;
}

Y después de eso, obtenga Datos de donde necesita:

ckEditor("tbxQuestion").getData()
2
Rustem Bayetov 25 feb. 2019 a las 10:54

Usando la consola de desarrollador, descubrí que esto funciona para mí:

CKEDITOR.instances. (Textarea_id) .getData ();

0
Davie Overman 21 abr. 2019 a las 15:07