2010-03-30 14 views
7

ich eine CKEditor Instanz programmatisch auf meiner Seite in der Code-Behind meiner ASP.NET-Seite hinzugefügt haben:Wie programmatisch bestimmen Namen CKEditor Instanz

VB.NET:

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

. .. was gut funktioniert. Ich kann das HTML auf dem Postback bekommen und Sachen damit machen.

Allerdings möchte ich auch einige clientseitige Sachen damit machen, speziell ein ausgewähltes Element aus einem anderen Steuerelement nehmen und es in den Text einfügen, indem ich das Ereignis onchange handhabe.

Also, wie kann ich den Namen der Editors Instanz im JavaScript bekommen, so dass ich solche Sachen tut:

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

Antwort

16

Angenommen, Sie nur einen Editor Instanz:

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

Hier ist, was die JavaScript-API instances sagt über ist.

Hier ist eine weitere Möglichkeit, den CKEditor zu definieren. Hier fck 'ist die Eingabefelder ID:

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

editor = CKEDITOR.instances.fck; 

Beachten Sie, wie ich bin dann in der Lage die Instanz .fck zu verweisen.

+0

Danke, funktioniert gut - viel weniger herumspielen. Allerdings eine Frage, wenn ich darf. Da die meisten meiner Arbeiten serverseitig auf .NET basieren (und ich sehr wenig JS gemacht habe), bin ich es gewohnt, Sammlungen als Sammlungen der Objekte selbst zu imitieren ... während "i" in diesem Beispiel die Editorinstanz ist Name. Woher soll ich das wissen? Bedeutet diese Syntax vielleicht eine Standardeigenschaft? – ChrisA

+0

Wenn Sie wissen, ist einfach, der Wert von currentInstance ist die HTML-ID von Ihrem Editor Textarea. Beispiel 'currentInstance = 'editor1''. –

+0

gibt es eine Möglichkeit, den Instanznamen zu vergeben? ... ... habe ich 'CKEDITOR.appendTo versucht (" my_div ", {Name:" my_editor "}, mein_String)' – dsdsdsdsd

0

Nun, ich habe einen Weg gefunden ... aber ich weiß nicht wie es viel ...

ich habe eine versteckte Feldsteuerung auf der Seite, nach dem Hinzufügen des Editor hinzugefügt und die ClientId in seinem Wert des Herausgebers setzen:

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

.. und dann in den JavaScript Ich kann das versteckte Ziel erreichen d, und damit der Herausgeber Name wie folgt:

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

Aber es ist ein bisschen geschmacklos, gelinde gesagt. Jeder hat einen besseren Weg?

1

Der folgende Code:

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

funktioniert gut für mich.

0

Wenn Sie CKEDITOR.appendTo(...) verwenden, beachten Sie, dass der ckeditor intern einen Instanznamen erstellt. Sie können also sofort nach der Erstellung nach diesem Namen suchen und ihn dann irgendwo speichern und später verwenden.

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

durch die Art und Weise: Die CKEDITOR.replace(...) Methode ermöglicht es Ihnen, einen Instanznamen (siehe oben antworten)

0

definieren Wenn Sie die Instanz von einer Plugin, mindestens in Version benötigen 4+ Sie tun können Dies.

CKEDITOR.currentInstance 

Hier möchte ich den Namen des Textfelds wissen, auf dem ich ckeditor anwendete.

CKEDITOR.currentInstance.name 
1

Wenn Sie nur eine einzelne Instanz haben und den Namen nicht kennen.

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