IE7/8: Fix selection range function
This commit is contained in:
@@ -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)
|
||||
},
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user