我已经写了一段时间的CMS了,目前正在进行最后几次接触。其中一个包括使用ajax在灯箱样式的窗口中提供tinyMCE编辑器。
当它被加载时,第一次它完美地工作,但当我第二次或更多时,元素名称搞砸了,它不会发回数据,或者在TinyMCE窗口中显示当前值。当我使用Chrome检查元素时,我可以看到包含之前tinyMCE窗口的范围仍然存在。
我使用document.body.removeChild来删除持有它的div。有没有人有任何想法?
增加:
当AJAX从发出请求回来时(它包含窗口内的所有html代码),它会创建一个新的div元素并使用document.body.appendChild将元素添加到文档并放入html代码进入div标签。
然后它遍历新代码并搜索该区域中的脚本(其中一个是MCE发起者)并将它们附加到头部以便执行它们。
如果用户单击取消而不是保存,则会使用以下命令删除div标记: document.body.removeChild(的document.getElementById( “popupbox”)); 哪个工作正常,
然而,当我提出弹出窗口并如前所述重新填充,并检查那里的元素时,仍然有一个由TinyMCE创建的跨度并且命名已经改变(而不是被'内容'识别,它是由于某种原因现在是8)并且编辑区域中没有内容。我用过: tinyMCE.execCommand( 'mceRemoveControl',真, 'MCE {$设置[' 名称 ']}'); tinyMCE.editors [0] .destroy();
但它们都不起作用。他们将tinymce窗口返回到textarea,但元素仍在那里。
答案 0 :(得分:1)
在移动或移除包含tinymce iframe的html元素之前,如您所述(使用正确的tinymce编辑器ID)删除编辑器是一个不错的选择。你在哪里加载你的tinymce.js?如果你使用ajax提供它我认为最好将它加载到父页面(!)。更多代码会有所帮助。
编辑:我记得我必须删除剩余范围的情况。这是我的代码:
// remove leftover span
$('div .mceEditor').each(function(item){
if (typeof $(this).attr('style') !== "undefined" ){
$(this).removeAttr('style'); // entfernt "style: none";
}
else {
$(this).remove();
}
});