Skip to content

Instantly share code, notes, and snippets.

@xphere
Last active August 29, 2015 13:56
Show Gist options
  • Save xphere/9067207 to your computer and use it in GitHub Desktop.
Save xphere/9067207 to your computer and use it in GitHub Desktop.
function setSelectionPlugin() {
var _setSelectionRange, _getCursorPosition, support = (function() {
var input = document.createElement('input'), result;
result = {
setSelectionRange: ('setSelectionRange' in input) || ('selectionStart' in input),
createTextRange: ('createTextRange' in input) || ('selection' in document)
};
input = null;
return result;
}());
if (support.setSelectionRange) {
_setSelectionRange = function (start, end) {
this.setSelectionRange(start, end);
}
_getCursorPosition = function () {
return this.selectionStart;
}
} else if (support.createTextRange) {
_setSelectionRange = function (start, end) {
var range = this.createTextRange();
range.collapse();
range.moveEnd('character', end);
range.moveStart('character', start);
range.select();
}
_getCursorPosition = function () {
var el = this[0];
var r = document.selection.createRange();
if (!el || !r) {
return 0;
}
var re = el.createTextRange(),
rc = re.duplicate();
re.moveToBookmark(r.getBookmark());
rc.setEndPoint('EndToStart', re);
return rc.text.length;
}
}
support = null;
return {
setSelectionRange: function (start, end) {
this.each(_setSelectionRange, [start, end])
},
setCursorPosition: function (start) {
this.each(_setSelectionRange, [start, start])
},
getCursorPosition: function () {
return this.length ? _getCursorPosition.call(this[0]) : -1;
}
};
}
$.fn.extend(setSelectionPlugin());
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment