2010-03-29 91 views
10

在我的頁面上,我需要偶爾移動DOM樹中的TinyMCE編輯器。然而,出於某種原因,編輯不喜歡它:它完全清除並變得無法使用。據我所見,這種行爲在Safari 4和Firefox 3.6之間是一致的,但不是Internet Explorer 7/8。 Here's an exampleTinyMCE編輯器不喜歡被移動

這真的讓我感到不適,做一些在IE瀏覽器中可以使用的東西,而不是使用更明顯的瀏覽器。有沒有在文檔中錯過有關從不試圖在DOM樹中移動編輯器的問題?有沒有某種解決方法?

+0

難道所有的事件處理程序都會在被移動時被綁定到元素上嗎? – alex 2010-03-29 03:05:41

+0

@alex:不太可能。即使元素沒有植根於文檔,元素上的事件偵聽器也會保留。 – zneak 2010-03-29 03:38:45

+0

是的,你說得對。我只記得在使用'innerHTML'時丟失了它們。但我只是檢查了你的源代碼,而且你正在使用正確的DOM方法。 CKeditor做同樣的事情 – alex 2010-03-29 04:21:47

回答

7

這是一個瀏覽器bug /問題,不是TinyMCE的問題。在某些瀏覽器中保留iframe內容是不可能的,因爲一旦您從dom中刪除節點,文檔/窗口就會卸載。我建議先刪除編輯器實例,然後重新添加它,而不是在DOM中移動它。

+0

這就是我最初一直在做的事情,但是我遇到了'document_base_url'的問題,在保存時搞亂了我的圖像。這實際上是無關的,我已經修復了它(用'convert_urls'爲'false')。但是,哦,它的工作原理,你應該得到一些代表。 – zneak 2010-03-30 00:31:03

+0

無法比TinyMCE的主要開發人員獲得更好的答案! +1 – alex 2010-03-31 00:06:00

8

有同樣的問題,這裏是我如何解決它...

創建問題

我使用jQuery移動包含導致它失去了它的所有TinyMCE的編輯器的DOM元素內容:

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

在此之後,編輯器的iframe內容被刪除。

解決方案

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

有些時候,編輯器會添加iframe的回來,但不可見。如果是這樣,取消隱藏容器:

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

請注意,這是使用tinymce 4.x.

+1

謝謝,這也適用於我。 – lucaswxp 2015-03-08 13:56:12

+1

感謝您的明確指示! – srvy 2017-01-18 03:35:35