2010-03-29 13 views
10

Na stronie, którą mam, muszę od czasu do czasu przenosić edytory TinyMCE do drzewa DOM. Jednak z jakiegoś powodu redaktor go nie lubi: oczyszcza się całkowicie i staje się bezużyteczny. O ile widzę, to zachowanie jest zgodne między Safari 4 i Firefox 3.6, ale nie Internet Explorer 7/8. Here's an example.Redaktor TinyMCE nie lubi być przenoszonym wokół

Naprawdę wkurza mnie to, aby zrobić coś, co działa w Internet Explorerze, ale nie w bardziej znaczących przeglądarkach. Czy jest coś, czego brakowało mi w dokumentach o tym, że nigdy nie próbuję przenieść edytora w drzewie DOM? Czy istnieje jakiś sposób obejścia tego problemu?

+0

Czy to możliwe, że wszystkie moduły obsługi zdarzeń utracą przywiązanie do elementów podczas przenoszenia? – alex

+0

@alex: Mało prawdopodobne. Detektory zdarzeń na elementach są utrzymywane, nawet jeśli nie są powiązane z dokumentem. – zneak

+0

Tak, masz rację. Właśnie przypomniałem sobie, że zgubiłeś je podczas używania 'innerHTML'. Ale właśnie sprawdziłem twoje źródło i używasz właściwych metod DOM. Czy CKeditor robi to samo – alex

Odpowiedz

7

To błąd przeglądarki/problemu nie stanowi problemu z TinyMCE. Niemożliwe jest zachowanie zawartości elementu iframe w niektórych przeglądarkach, ponieważ po usunięciu węzła z katalogu dom rozładowuje się dokument/okno. Sugeruję najpierw usunięcie instancji edytora, a następnie ponowne dodanie go zamiast przeniesienia go do DOM.

+0

To było to, co robiłem początkowo, ale miałem problemy z 'document_base_url' mylące moje obrazy na zapis. To było właściwie niezwiązane i naprawiłem (z 'convert_urls' na' false'). Ale no cóż, to działa, a ty zasługujesz na rep. – zneak

+0

Nie można uzyskać lepszej odpowiedzi niż jedna z głównych programistów TinyMCE! +1 – alex

8

miał ten sam problem i oto jak postanowiłem go ...

Tworzenie problemu

używam jQuery przenieść elementu DOM, który zawiera edytor TinyMCE, który powoduje, że aby stracić wszystko to treść:

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

Po tym punkcie zawartość elementu iframe edytora zostanie usunięta.

Rozwiązanie

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

Są chwile, gdy edytor doda iframe z powrotem, ale nie będzie widoczny. W takim przypadku odkryj kontener:

$textarea = $('#' + textareaId) 
$textarea.closest('.mce-tinymce.mce-container').show() 

Pamiętaj, że używasz tinymce 4.x.

+1

Dziękuję, to też zadziałało. – lucaswxp

+1

dzięki za jasne instrukcje! – srvy

Powiązane problemy