+(function() {
+ jQuery.fn.getSelection = function() {
+ var e = (this.jquery) ? this[0] : this;
+
+ return (
+ // Mozilla / dom 3.0
+ ('selectionStart' in e && function() {
+ var l = e.selectionEnd - e.selectionStart;
+ return { start: e.selectionStart, end: e.selectionEnd, length: l, text: e.value.substr(e.selectionStart, l) };
+ }) ||
+
+ // Internet Explorer
+ (document.selection && function() {
+ e.focus();
+
+ var r = document.selection.createRange();
+ if (r === null) {
+ return { start: 0, end: e.value.length, length: 0 }
+ }
+
+ var re = e.createTextRange();
+ var rc = re.duplicate();
+ re.moveToBookmark(r.getBookmark());
+ rc.setEndPoint('EndToStart', re);
+
+ return { start: rc.text.length, end: rc.text.length + r.text.length, length: r.text.length, text: r.text };
+ }) ||
+
+ // browser not supported
+ function() { return null; }
+ )();
+ },
+
+ jQuery.fn.replaceSelection = function() {
+ var e = this.jquery ? this[0] : this;
+ var text = arguments[0] || '';
+ var scrollTop = $(this).scrollTop();
+
+ return (
+ // Mozilla / dom 3.0
+ ('selectionStart' in e && function() {
+ var selectionStart = e.selectionStart;
+ console.log(e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length));
+ e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length);
+ $(e).scrollTop(scrollTop).focus();
+ e.selectionStart = selectionStart + text.length;
+ e.selectionEnd = selectionStart + text.length;
+ return this;
+ }) ||
+
+ // Internet Explorer
+ (document.selection && function() {
+ e.focus();
+ document.selection.createRange().text = text;
+ return this;
+ }) ||
+
+ // browser not supported
+ function() {
+ e.value += text;
+ return jQuery(e);
+ }
+ )();
+ }
+})();
\ No newline at end of file