我已经在我的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
}
答案 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