Можете воспользоваться следующей функцией:
jQuery.fn.extend({ insertAtCaret: function(myValue){ return this.each(function(i) { if (document.selection) { // Для браузеров типа Internet Explorer this.focus(); var sel = document.selection.createRange(); sel.text = myValue; this.focus(); } else if (this.selectionStart || this.selectionStart == ''0'') { // Для браузеров типа Firefox и других Webkit-ов var startPos = this.selectionStart; var endPos = this.selectionEnd; var scrollTop = this.scrollTop; this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length); this.focus(); this.selectionStart = startPos + myValue.length; this.selectionEnd = startPos + myValue.length; this.scrollTop = scrollTop; } else { this.value += myValue; this.focus(); } }) } });
Поддерживаются обычные поля ввода и textarea. Правда, эта функция работает с DOM напрямую, а расширяет jQuery только для удобства использования. (При необходимости можно переписать как отдельную функцию для чистого JavaScript).
Использовать так:
$(''#thetext,#thearea'').insertAtCaret("Текст для вставки");