2013-08-16 15 views
5

私は一度に複数の画面を表示するために "タブ"を使用するより大きなプロジェクトにCKEditorを統合しています。タブを切り替えると、CKEditorも入っているタブdivが切り離されます。もう一度付け加えると、CKEditorが壊れています。それは目に見えますが、テキストが失われ、テキストを書き込むことはできません。削除してDOMに追加した後にCKEditorが壊れました

例コード:

<script src="http://ckeditor.com/apps/ckeditor/4.2/ckeditor.js?mriyyd"></script> 
<div id="section1"> 
    <script> 
     CKEDITOR.appendTo('section1', 
     null, 
      '<p>This is some <strong>sample text</strong>.</p>'); 
    </script> 
</div> 
<script> 
    var s = document.getElementById('section1'); 
    var sP = s.parentNode; 
</script> 
<button onClick="sP.removeChild(s);">Detach</button> 
<button onClick="sP.appendChild(s);">Attach</button> 

あなたはここでそれを試すことができます。http://jsfiddle.net/kxtxz/6/

は、誰もが経験し、最終的には同様の問題を解決していますか?

答えて

3

CKEditorインスタンスの背後にあるロジックは、DOM構造に依存しているため、実際には変更すると壊れてしまいます。

しかし、単純な解決策があります。取り外す際

CKEDITOR.instances.instanceName.destroy(); 

を、そして取り付けるとき

CKEDITOR.appendTo('section1', null, savedData); 

で再びエディタを再作成します。そして、基本的に呼び出す

var savedData = CKEDITOR.instances.instanceName.getData(); 

:離脱する前に最初のデータを取得します。

+1

iframeがブラウザによってアンロードされるため、DOMから切り離された後に破損します。他のすべてがうまくいくことを除けば。 – Reinmar

+0

このソリューションは正常に動作します。ありがとう。 それはここで見ることができます:http://jsfiddle.net/kxtxz/8/ 私はそれを回避策なしで動作させることを望んでいましたが、私は恐れることはできません。 –

関連する問題