Как программно определить имя экземпляра CKEditor - PullRequest
8 голосов
/ 30 марта 2010

Я добавил экземпляр CKEditor программно на мою страницу в коде моей страницы ASP.NET:

VB.NET:

itemEditor = New CkEditor
cell.Controls.Add(itemEditor)

... который отлично работает. Я могу получить HTML-код на обратной передаче и делать с ним что-то еще.

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

Итак, как мне получить имя экземпляра редактора в JavaScript, чтобы я мог делать такие вещи, как:

function GetCkText()
{
    var htmlFromEditor = CKEDITOR.instances['editorName'].getData();
    // do stuff with htmlFromEditor
}

Ответы [ 6 ]

16 голосов
/ 30 марта 2010

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

for ( var i in CKEDITOR.instances ){
   var currentInstance = i;
   break;
}
var oEditor   = CKEDITOR.instances[currentInstance];

Вот что говорит JavaScript API о экземплярах .

Вот еще один способ определения CKEditor. Здесь 'fck' - идентификатор поля ввода:

CKEDITOR.replace( 'fck', {
    customConfig : prefix + 'js/ckeditor/config.js',
    height: 600,
    width: 950
});

editor = CKEDITOR.instances.fck;

Обратите внимание, как я могу ссылаться на экземпляр, используя .fck.

3 голосов
/ 24 февраля 2016

Если у вас есть только один экземпляр, и вы не знаете его имя.

CKEDITOR.instances[Object.keys(CKEDITOR.instances)[0]].getData()
2 голосов
/ 29 июля 2011

следующий код:

var allInstances=CKEDITOR.instances;
for ( var i in allInstances ){
    alert(allInstances[i].name);
}

у меня отлично работает.

0 голосов
/ 16 июля 2015

Если вам нужен экземпляр из плагина , по крайней мере, в версии 4+ вы можете сделать это.

CKEDITOR.currentInstance

Здесь я хочу узнать название текстовой области, к которой я применил ckeditor.

CKEDITOR.currentInstance.name
0 голосов
/ 13 декабря 2013

Если вы используете CKEDITOR.appendTo(...), имейте в виду, что ckeditor действительно создает имя экземпляра внутри. Таким образом, вы можете запросить это имя сразу после его создания, затем сохранить его где-нибудь и использовать позже.

var lvo_editor = CKEDITOR.appendTo( "my_div" , null , lvs_html ) ; 
my_global_var  = lvo_editor.name                                 ;

кстати: метод CKEDITOR.replace(...) позволяет вам определить имя экземпляра (см. Ответ выше)

0 голосов
/ 30 марта 2010

Ну, я нашел способ ... но мне он не очень нравится ...

После добавления редактора я добавил на страницу элемент управления «Скрытое поле» и установил его значение ClientId:

Dim hdn As New HiddenField
With hdn
    .ID = "HiddenField"
    .Value = itemEditor.ClientID
End With
cell.Controls.Add(hdn)

.. а затем в JavaScript я могу получить скрытое поле и, следовательно, имя редактора следующим образом:

function GetCkText()
{
    var hdn = document.getElementById("HiddenField");
    var editorName = hdn.getAttribute("value");
    var editor = CKEDITOR.instances[editorName];
    alert(editor.getData());
    return false;
}

Но это немного не элегантно, если не сказать больше. У кого-нибудь есть способ получше?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...