7

ページをリロードしない js アプリケーションがあるため、移動するときに TinyMCE コントロールを完全に削除する必要があり、必要な領域に移動するときに再初期化する必要があります。この質問に対する受け入れられた回答を試しましたが、何もしないようです。

tinyMCE を削除してから再度追加するにはどうすればよいですか?

 tinymce.EditorManager.execCommand('mceRemoveControl',true, editor_id);

そして私の具体的な実装:

  //if I throw an alert here, it does get called, so I know it's not null
  if (tinyMCE.getInstanceById("main-text"))
            tinyMCE.EditorManager.execCommand('mceRemoveControl', true, "main-text");

私も試しました

  tinyMCE.remove( tinyMCE.getInstanceById("main-text"));
  // AND
  tinyMCE.remove( "main-text");

条件にアラートを入れると、そのステートメントが実行されることはわかっています...それが正しい ID であることはわかっています。API に埋もれているものが他にありませんか? これは jQuery バージョンではありません。エディターは削除の試行後も保持され、フォームを使用して状態に戻って再初期化すると、同じ ID を持つ新しいエディターも取得されます。

編集: 以下の解決策は、現在のビルド 3.5b3 では機能せず、3.4.9 でのみ機能します。「t が定義されていない」というバグがあります

念のため、これは init の後の DOM の関連部分です。

 <textarea id="main-text" style="display: none;" aria-hidden="true"></textarea>
<span id="main-text_parent" class="mceEditor defaultSkin" role="application" aria-labelledby="main-text_voice" style="display: inherit;">
<span id="main-text_voice" class="mceVoiceLabel" style="display:none;">Rich Text Area</span>
<table id="main-text_tbl" class="mceLayout" cellspacing="0" cellpadding="0" role="presentation" style="width: 100%; height: 400px;">
<tbody>
<tr class="mceFirst" role="presentation">
<td class="mceToolbar mceLeft mceFirst mceLast" role="presentation">
<div id="main-text_toolbargroup" aria-labelledby="main-text_toolbargroup_voice" role="group" tabindex="-1">
<span role="application">
</div>
<a onfocus="tinyMCE.getInstanceById('main-text').focus();" title="Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X" accesskey="z" href="#"></a>
</td>
</tr>
<tr>
<tr class="mceLast">
</tbody>
</table>
</span>
4

2 に答える 2

5

私はこれに数回遭遇しました。それを解決するには、tinyMCE コントロールにフォーカスがないことを確認し (ブラウザによってはバグが発生します)、tinyMCE コントロールを削除し、コントロールが関連付けられていたテキスト領域を削除します。

関連するコードは次のとおりです。

if (typeof tinyMCE != 'undefined') {
    tinyMCE.execCommand('mceFocus', false, 'main-text');
    tinyMCE.execCommand('mceRemoveControl', false, 'main-text');
    var container = document.getElementById('main-text-parent');
    container.removeChild(document.getElementById('main-text'));  
    //i normally just do $("#main-text").remove(); but you specified not using jquery, so this should, in theory, remove it, if main-text-parent is replaced with the parent container of your main-text.
}
于 2012-04-10T20:39:49.257 に答える