2010-03-29 9 views
10

In una pagina, ho bisogno di spostare gli editor TinyMCE nell'albero DOM una volta ogni tanto. Tuttavia, per qualche motivo, l'editor non gli piace: si cancella completamente e diventa inutilizzabile. Per quanto posso vedere, questo comportamento è coerente tra Safari 4 e Firefox 3.6, ma non Internet Explorer 7/8. Here's an example.L'editor di TinyMCE non viene spostato intorno a

Mi fa davvero arrabbiare per fare qualcosa che funziona in Internet Explorer ma non con browser più apprezzabili. C'è qualcosa che mi è mancato nei documenti di non aver mai provato a spostare un editor nell'albero DOM? C'è qualche tipo di soluzione alternativa?

+0

Potrebbe essere che tutti gli event handler perdono il legame con gli elementi quando vengono spostati? – alex

+0

@alex: improbabile. I listener di eventi sugli elementi vengono mantenuti anche se non sono collegati al documento. – zneak

+0

Sì, hai ragione. Mi sono appena ricordato che li hai persi usando 'innerHTML'. Ma ho appena controllato la tua fonte e stai usando i metodi DOM appropriati. CKeditor fa la stessa cosa – alex

risposta

7

Questo è un bug/problema del browser non è un problema con TinyMCE. È impossibile conservare i contenuti iframe in alcuni browser poiché una volta rimosso il nodo dal dom viene scaricato il documento/la finestra. Suggerisco di rimuovere prima l'istanza dell'editor e di aggiungerla nuovamente anziché spostarla nel DOM.

+0

Questo era quello che stavo facendo inizialmente, ma stavo avendo problemi con 'document_base_url' che ha danneggiato le mie immagini su save. Questo in realtà non era correlato e l'ho risolto (con 'convert_urls' in' false'). Ma vabbè, funziona, e ti meriti un rappresentante. – zneak

+0

Non riesci a ottenere una risposta migliore rispetto a quella dello sviluppatore principale di TinyMCE! +1 – alex

8

avuto lo stesso problema ed ecco come ho risolto è ...

Creare il problema

ho utilizzare jQuery per spostare l'elemento DOM che contiene l'editor TinyMCE che fa perdere tutti i suoi contenuto:

$('.form-group:last').after($('.form-group:first')) 

Dopo questo punto, i contenuti iframe dell'editor vengono rimossi.

La soluzione

var textareaId = 'id_of_textarea'; 
tinyMCE.get(textareaId).remove(); 
tinyMCE.execCommand("mceAddEditor", false, textareaId); 

Ci sono momenti in cui l'editor aggiungerà l'iframe indietro, ma non essere visibile. In questo caso, visualizza il contenitore:

Nota, questo sta usando il 4.x di tinymce.

+1

Grazie, ha funzionato anche per me. – lucaswxp

+1

grazie per le chiare istruzioni! – srvy

Problemi correlati