Skip to content

Instantly share code, notes, and snippets.

@mathiasbynens
Created March 9, 2010 11:13
Show Gist options
  • Save mathiasbynens/326491 to your computer and use it in GitHub Desktop.
Save mathiasbynens/326491 to your computer and use it in GitHub Desktop.
jQuery insertAtCaret plugin
// I found this somewhere on the intertubes, and optimized it
$.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();
}
});
};
@chrisdpeters
Copy link

Thanks for this. This is the only working insertAtCaret implementation that I could find that worked for me.

@houfeng0923
Copy link

//Real broswers .
humor code ..ha

@PhilippePerret
Copy link

Maybe:

$.fn.insertAtCaret = function(myValue) {
    if(undefined === myValue || null === myValue){
        // or exception raised
        return
    }

@elpescador-nl
Copy link

Now sel is added to the global scope window outside of the function. Maybe add var in front of the declaration at line 7:

var sel = document.selection.createRange();

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment