Ответ 1
Следующая функция вставит текст в позицию каретки и удалит существующий выбор. Он работает во всех основных настольных браузерах:
function insertTextAtCursor(text) {
var sel, range;
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
range.deleteContents();
range.insertNode( document.createTextNode(text) );
}
} else if (document.selection && document.selection.createRange) {
document.selection.createRange().text = text;
}
}
UPDATE
Исходя из комментариев, здесь приведен код для сохранения и восстановления выбора. Перед отображением контекстного меню вы должны сохранить возвращаемое значение saveSelection
в переменной, а затем передать эту переменную в restoreSelection
, чтобы восстановить выбор после скрытия контекстного меню и перед вставкой текста.
function saveSelection() {
if (window.getSelection) {
sel = window.getSelection();
if (sel.getRangeAt && sel.rangeCount) {
return sel.getRangeAt(0);
}
} else if (document.selection && document.selection.createRange) {
return document.selection.createRange();
}
return null;
}
function restoreSelection(range) {
if (range) {
if (window.getSelection) {
sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);
} else if (document.selection && range.select) {
range.select();
}
}
}