У меня была похожая проблема, когда изображение, которое я хотел вставить, всегда направлялось в верхнюю часть редактора. Я решил это, установив поле 'onchange_callback' в редакторе init:
tinyMCE.init({..., onchange_callback: 'updateSelectionBookmark', ...});
Это вызовет мою функцию «updateSelectionBookmark», когда на экране что-то будет изменено, включая размытие редактора (Подробнее: http://tinymce.moxiecode.com/wiki.php/Configuration:onchange_callback). Мой updateSelectionBookmark выглядел примерно так:
function updateSelectionBookmark (ed) {
ed.updatedSelectionBookmark = ed.selection.getBookmark(1);
}
Это добавит пользовательское свойство к объекту редактора, который всегда будет содержать самую последнюю закладку.
Затем я использую сохраненную закладку, когда мне нужно добавить содержимое:
ed.selection.moveToBookmark(ed.updatedSelectionBookmark);
Я хотел вставить HTML, поэтому поместил его перед вызовом команды экземпляра (в моем случае mceInsertRawHTML).
Надеюсь, это кому-нибудь поможет, даже если мой ответ опоздал на несколько месяцев.
Редактировать (несколько месяцев спустя): Поэтому я изначально нашел это решение при работе с TinyMCE 3.2.2.3, но недавно мы обновили до 3.4.4 для совместимости с IE9. Похоже, что вышеприведенное решение работает не так хорошо, как я думал. С тех пор я нашел (насколько я могу судить) идеальное решение для этого. Это похоже на выше, за исключением случаев, когда и где вызвать обратный вызов. Вместо использования onchange_callback в настройках, вы должны использовать событие редактора onEvent:
tinyMCE.init({
...,
setup: function (ed) {
ed.onEvent.add(function (ed, e) {
ed.updatedSelectionBookmark = ed.selection.getBookmark(1);
});
},
...
});
Это заменяет необходимость использования функции updateSelectionBookmark или параметра onchange_callback. Причина, по которой onEvent работает лучше, чем onChange, заключается в том, что он вызывается после любого возможного события, включая нажатие мыши или клавиши, поэтому положение курсора гарантированно сохраняется даже при перемещении, но содержимое не изменяется.
После настройки редактора с указанным выше обратным вызовом события просто используйте moveToBookmark, как указано выше, чтобы восстановить выделение. Я проверял это на IE9, Chrome, FF6, он работает при вставке изображений / текста в текст / таблицы.