在我的頁面上,我需要偶爾移動DOM樹中的TinyMCE編輯器。然而,出於某種原因,編輯不喜歡它:它完全清除並變得無法使用。據我所見,這種行爲在Safari 4和Firefox 3.6之間是一致的,但不是Internet Explorer 7/8。 Here's an example。TinyMCE編輯器不喜歡被移動
這真的讓我感到不適,做一些在IE瀏覽器中可以使用的東西,而不是使用更明顯的瀏覽器。有沒有在文檔中錯過有關從不試圖在DOM樹中移動編輯器的問題?有沒有某種解決方法?
在我的頁面上,我需要偶爾移動DOM樹中的TinyMCE編輯器。然而,出於某種原因,編輯不喜歡它:它完全清除並變得無法使用。據我所見,這種行爲在Safari 4和Firefox 3.6之間是一致的,但不是Internet Explorer 7/8。 Here's an example。TinyMCE編輯器不喜歡被移動
這真的讓我感到不適,做一些在IE瀏覽器中可以使用的東西,而不是使用更明顯的瀏覽器。有沒有在文檔中錯過有關從不試圖在DOM樹中移動編輯器的問題?有沒有某種解決方法?
這是一個瀏覽器bug /問題,不是TinyMCE的問題。在某些瀏覽器中保留iframe內容是不可能的,因爲一旦您從dom中刪除節點,文檔/窗口就會卸載。我建議先刪除編輯器實例,然後重新添加它,而不是在DOM中移動它。
有同樣的問題,這裏是我如何解決它...
創建問題
我使用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.
難道所有的事件處理程序都會在被移動時被綁定到元素上嗎? – alex 2010-03-29 03:05:41
@alex:不太可能。即使元素沒有植根於文檔,元素上的事件偵聽器也會保留。 – zneak 2010-03-29 03:38:45
是的,你說得對。我只記得在使用'innerHTML'時丟失了它們。但我只是檢查了你的源代碼,而且你正在使用正確的DOM方法。 CKeditor做同樣的事情 – alex 2010-03-29 04:21:47