Ответ 1
Вы можете проверить этот ответ. Плагин insertAtCaret
jquery кажется очень приятным.
script ниже вставляет текст в конец области текста. Мне нужно перейти на вставить текст после текущей позиции курсора в текстовой области.
jQuery(document).ready(function($){
$('#addCommentImage').click(function(){
var imageLoc = prompt('Enter the Image URL:');
if ( imageLoc ) {
$('#comment').val($('#comment').val() + '[img]' + imageLoc + '[/img]');
}
return false;
});
});
Вы можете проверить этот ответ. Плагин insertAtCaret
jquery кажется очень приятным.
если выше не работает (это не было в моем случае - возможно, моя конфигурация немного отличается), вот еще одно решение:
вы можете использовать эту функцию расширения, чтобы получить позицию:
(function ($, undefined) {
$.fn.getCursorPosition = function () {
var el = $(this).get(0);
var pos = 0;
if ('selectionStart' in el) {
pos = el.selectionStart;
} else if ('selection' in document) {
el.focus();
var Sel = document.selection.createRange();
var SelLength = document.selection.createRange().text.length;
Sel.moveStart('character', -el.value.length);
pos = Sel.text.length - SelLength;
}
return pos;
}
})(jQuery);
используется следующее: var position = $("#selector").getCursorPosition()
чтобы вставить текст в позицию:
var content = $('#selector').val();
var newContent = content.substr(0, position) + "text to insert" + content.substr(position);
$('#selector').val(newContent);
Что все.
Я изменил различные версии этих версий, чтобы придумать версию, которая помещает первый текст перед тем, что вы выбрали, и второй текст после того, что вы выбрали, и сохраните выбранное значение. Это работает в chrome и FF, но не в IE.
jQuery.fn.extend({
insertAtCaret: function(myValue, myValueE){
return this.each(function(i) {
if (document.selection) {
//For browsers like Internet Explorer
this.focus();
sel = document.selection.createRange();
sel.text = myValue + myValueE;
this.focus();
}
else if (this.selectionStart || this.selectionStart == '0') {
//For browsers like Firefox and Webkit based
var startPos = this.selectionStart;
var endPos = this.selectionEnd;
var scrollTop = this.scrollTop;
this.value = this.value.substring(0, startPos)+myValue+this.value.substring(startPos,endPos)+myValueE+this.value.substring(endPos,this.value.length);
this.focus();
this.selectionStart = startPos + myValue.length;
this.selectionEnd = ((startPos + myValue.length) + this.value.substring(startPos,endPos).length);
this.scrollTop = scrollTop;
} else {
this.value += myValue;
this.focus();
}
})
}
});
Использование:
$('#box').insertAtCaret("[Before selection]", "[after]");
Кроме того: не претендуя на это как на мое каким-либо образом.