我正在尝试在当前光标位置插入一些内容或替换TinyMCE编辑器实例中的选定内容。我正在使用这个:
tinyMCEPopup.editor.selection.setContent(content);
其中content
是我要插入的HTML字符串。
它在Firefox,Opera和Chrome上运行良好,但在IE中不起作用。相反,它会在编辑器的开头插入内容,而不是选择内容。我也试过了:
tinyMCEPopup.execCommand('mceInsertContent', false, content);
再次,IE中的行为相同。用于插入特殊字符的TinyMCE代码使用上面的功能,并且有效!我试过在我的插件中复制它仍然没有快乐...
function insertChar(chr) {
tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
// Refocus in window
if (tinyMCEPopup.isWindow)
window.focus();
tinyMCEPopup.editor.focus();
tinyMCEPopup.close();
}
更新:
仍然没有在IE中工作,Opera甚至没有在工具栏中显示我的插件按钮(尽管这可能是一个单独的问题)!我现在也尝试过jQuery插件,让编辑器加载,但是无法调用mceInsertContent方法,即使使用它:
$('#my-editor-id').tinymce().execCommand('mceInsertContent', false, content);
出现错误:“对象没有方法:tinymce” - 也许我不能通过弹出窗口调用它?!
答案 0 :(得分:4)
你试过打电话:
tinyMCEPopup.restoreSelection();
之前打电话
tinyMCEPopup.execCommand('mceInsertContent', false, '&#' + chr + ';');
答案 1 :(得分:3)
问题是当你点击编辑器外的按钮或链接之类的东西时,TinyMCE会丢失当前光标位置,导致它失去焦点。
要解决此问题,请使用按钮或链接的mousedown事件。这样,您可以在焦点丢失之前执行插入操作。
$("#insert_link").mousedown(function (e) {
var editor = tinyMCE.get("editor");
editor.execCommand('mceInsertContent', false, "Insert Value");
e.preventDefault();
});
答案 2 :(得分:2)
在类似场景中对我有用的东西,以及可能在此处解决的问题 - 使用
editor.selection.getBookmark();
失去编辑的焦点之前 和
editor.selection.moveToBookmark();
插入内容之前。
问题是,在FF中,当您将光标放在包含文本的文本字段中的某个位置时,然后单击其他位置并返回(即通过按Tab键),插入符将显示在焦点之前的位置丢失了。在IE中,它将返回到开头。我希望这会有所帮助。