如何以编程方式确定CKEditor实例的名称

时间:2010-03-30 11:49:21

标签: javascript ckeditor

我已经在我的ASP.NET页面的代码隐藏中以编程方式将CKEditor实例添加到了我的页面:

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 个答案:

答案 0 :(得分:16)

假设您只有一个编辑器实例:

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

以下是JavaScript API对instances所说的内容。

这是定义CKEditor的另一种方法。这里'fck'是输入字段id:

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

editor = CKEDITOR.instances.fck;

请注意我是如何使用.fck引用该实例的。

答案 1 :(得分:3)

如果您只有一个实例而且您不知道它的名称。

CKEDITOR.instances[Object.keys(CKEDITOR.instances)[0]].getData()

答案 2 :(得分:2)

以下代码:

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

对我来说很好。

答案 3 :(得分:0)

嗯,我找到了办法...但我不喜欢它......

在添加编辑器后,我在页面中添加了一个隐藏字段控件,并将编辑器的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;
}

但至少可以说,它有点不优雅。谁有更好的方法?

答案 4 :(得分:0)

如果您使用CKEDITOR.appendTo(...),请记住ckeditor会在内部创建实例名称。因此,您可以在创建后立即查询该名称,然后将其存储在某处,稍后再使用。

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

顺便说一句:CKEDITOR.replace(...)方法允许您定义实例名称(请参阅上面的答案)

答案 5 :(得分:0)

如果你需要插件中的实例,至少在版本4+中你可以这样做。

CKEDITOR.currentInstance

在这里,我想知道我应用ckeditor的textarea的名称。

CKEDITOR.currentInstance.name