Как использовать функцию JQuery InsertAtCaret
Я нашел здесь функцию JQuery InsertAtCaret, но нет подробностей о том, как ее использовать. Я много пытался понять, как это можно использовать, но никак не мог найти. Вот функция.
$.fn.insertAtCaret = function(myValue) {
return this.each(function() {
var me = this;
if (document.selection) { // IE
me.focus();
sel = document.selection.createRange();
sel.text = myValue;
me.focus();
} else if (me.selectionStart || me.selectionStart == '0') { // Real browsers
var startPos = me.selectionStart, endPos = me.selectionEnd, scrollTop = me.scrollTop;
me.value = me.value.substring(0, startPos) + myValue + me.value.substring(endPos, me.value.length);
me.focus();
me.selectionStart = startPos + myValue.length;
me.selectionEnd = startPos + myValue.length;
me.scrollTop = scrollTop;
} else {
me.value += myValue;
me.focus();
}
});
};
У меня есть поле ввода текстового поля и текстовое поле под ним. Где я должен вызвать эту функцию и какое значение я должен дать ей. И где я должен дать ссылку на мою текстовую область.
2 ответа
Решение
Вот модифицированная версия вышеуказанного плагина:
jQuery.fn.extend({
insertAtCaret: function(myValue){
return this.each(function(i) {
if (document.selection) {
//For browsers like Internet Explorer
this.focus();
sel = document.selection.createRange();
sel.text = myValue;
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(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();
}
})
}
});
По сути, этот плагин позволяет вставлять фрагмент текста в несколько textbox
или же textarea
, Вы можете использовать это так:
$('#element1, #element2, #element3, .class-of-elements').insertAtCaret('text');
Firefox недавно сломал для меня приведенный выше код, мне пришлось внести изменения.
jQuery.fn.extend({insertAtCaret: function(myValue){
return this.each(function(i) {
if (document.selection) {
//For browsers like Internet Explorer
//log("INSERT IE: " + myValue);
this.focus();
var sel = document.selection.createRange();
sel.text = myValue;
this.focus();
} else if (this.selectionStart || this.selectionStart == '0') {
//For browsers like Firefox and Webkit based
//log("INSERT Firefox: " + myValue);
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 if($(this).hasClass("ql-editor")){
//log("INSERT QL-EDITOR: " + myValue);
var range = window.getSelection().getRangeAt(0);
var startPos = range.startOffset;
var endPos = range.endOffset;
var value = $(this).html();
$(this).html(value.substring(0, startPos) + myValue + value.substring(endPos, value.length));
this.focus();
} else {
//log("INSERT Unknown: " + myValue);
this.value += myValue;
this.focus();
}
//log(this);
});
}});