IE7/8: Fix selection range function

This commit is contained in:
Eston Bond
2010-12-03 22:20:25 -08:00
parent 7976a6fc44
commit d4a78db017
@@ -503,11 +503,46 @@
*/
getFieldSelectionPosition: function( $field ) {
if ($field.length) {
return {
start: $field[0].selectionStart,
end: $field[0].selectionEnd
var start = 0, end = 0, normalizedValue, range,
textInputRange, len, endRange;
var el = $field.get(0);
if (typeof el.selectionStart == "number" &&
typeof el.selectionEnd == "number") {
start = el.selectionStart;
end = el.selectionEnd;
} else {
range = document.selection.createRange();
if (range && range.parentElement() == el) {
len = el.value.length;
normalizedValue = el.value.replace(/\r\n/g, "\n");
textInputRange = el.createTextRange();
textInputRange.moveToBookmark(range.getBookmark());
endRange = el.createTextRange();
endRange.collapse(false);
if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
start = end = len;
} else {
start = -textInputRange.moveStart("character", -len);
start += normalizedValue.slice(0, start).split("\n").length - 1;
if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
end = len;
} else {
end = -textInputRange.moveEnd("character", -len);
end += normalizedValue.slice(0, end).split("\n").length - 1;
}
}
}
}
}
return {
start: start,
end: end
};
} // end if ($field.length)
},