2010-03-30 12 views
7

He añadido una instancia de CKEditor mediante programación a mi página en el código subyacente de mi página ASP.NET:Cómo determinar mediante programación el nombre de la instancia de CKEditor

VB.NET:

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

. .. que funciona bien. Puedo obtener el HTML en la devolución de datos y hacer cosas con él.

Sin embargo, también quiero hacer algunas cosas del lado del cliente, específicamente sacar un elemento seleccionado de otro control, e insertarlo en el texto manejando el evento onchange.

Entonces, ¿cómo puedo obtener el nombre de la instancia en el editor de JavaScript, por lo que puedo hacer cosas como:

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

Respuesta

16

Suponiendo que sólo tiene una instancia editor:

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

Esto es lo que la API de JavaScript dice acerca de instances.

Aquí hay otra forma de definir el CKEditor. Aquí 'fck' es la entrada de los campos de ID:

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

editor = CKEDITOR.instances.fck; 

Aviso cómo soy capaz entonces de hacer referencia a la instancia utilizando .fck.

+0

Gracias, funciona bien - mucho menos lío. Sin embargo, una pregunta, si puedo. Como la mayoría de mi trabajo es del lado del servidor .NET (y he hecho muy poco JS), estoy acostumbrado a que las colecciones de instancias sean colecciones de los objetos en sí mismas ... mientras que 'i' en su ejemplo aquí es la instancia del editor nombre. ¿Cómo puedo saber esto? ¿Tal vez esta sintaxis implica una propiedad predeterminada? – ChrisA

+0

Si sabe que es simple, el valor de currentInstance es la identificación HTML de su editor textarea. Ejemplo 'currentInstance = 'editor1''. –

+0

¿hay alguna manera de asignar el nombre de instancia? ... ... probé 'CKEDITOR.appendTo (" my_div ", {name:" my_editor "}, my_string)' – dsdsdsdsd

0

Bueno, yo he encontrado una manera ... pero no lo sé como mucho ...

he añadido un control oculto campos a la página, después de añadir el editor, y poner ClientId del editor en su valor:

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

.. y luego en el código JavaScript , Puedo obtener el campo oculto d, y de ahí el nombre del editor de la siguiente manera:

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

Pero es un poco poco elegante, por decir lo menos. Alguien tiene una mejor manera?

1

El siguiente código:

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

funciona bien para mí.

0

Si está utilizando CKEDITOR.appendTo(...), tenga en cuenta que el ckeditor crea internamente un nombre de instancia. Entonces puede consultar ese nombre inmediatamente después de crearlo, luego almacenarlo en algún lugar y usarlo más tarde.

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

por cierto: El método CKEDITOR.replace(...) le permite definir un nombre de instancia (véase la respuesta anterior)

0

Si necesita la instancia de un plugin, al menos en la versión 4+ que puede hacer esta.

CKEDITOR.currentInstance 

Aquí quiero saber el nombre del área de texto en el que apliqué ckeditor.

CKEDITOR.currentInstance.name 
1

Si solo tiene una sola instancia y no sabe el nombre.

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