Проблема с выбором и диапазоном IE
Я пытаюсь получить начальный элемент и конечный элемент выделения и смещение выделения в каждом, я делаю это в Firefox следующим образом:
var delselection = window.getSelection();
var startOffset = delselection.anchorOffset;
var endOffset = delselection.focusOffset;
var startNode = delselection.anchorNode.parentNode;
var endNode = delselection.focusNode.parentNode;
Однако я понятия не имею, как это сделать в IE6, кто-нибудь сможет указать мне правильное направление?
3 ответа
document.selection.
Однако объект TextRange, возвращаемый IE, не соответствует Firefox/WebKit/W3, и определение точных положений начальной и конечной точек очень разочаровывает. В зависимости от того, что именно вы делаете с диапазоном, вы можете получить что-то с помощью range.parentElement(), range.inRange() или range.compareEndPoints(). Для редакторов форматированного текста вы обычно используете потрясающе уродливый интерфейс range.execCommand().
Реализация IE Range настолько странная и отличается от модели Mozilla/Webkit/W3, что вы обычно получаете совершенно разные пути кода для всего, что связано с выбором между ними.
Если вы знаете объект, в котором находится выделение (например, это поле ввода, которое вводит пользователь, который вы хотите изменить во время ввода текста), этот код делает свое дело:
var selObj = null;
var selSave = null;
var selSaveEnd = null;
function SaveSelection(obj) {
if (obj.selectionStart) {
selObj = obj;
selSave = obj.selectionStart;
selSaveEnd = obj.selectionEnd;
}
else {
// Internet Explorer case
selSave = document.selection.createRange();
}
}
function RestoreSelection() {
if (selObj) {
selObj.focus();
selObj.selectionStart = selSave;
selObj.selectionEnd = selSaveEnd;
}
else {
// Internet Explorer case
selSave.select();
}
}
Вы должны взглянуть на объекты ControlRange и TextRange спецификации IE.
AnchorOffset, focusOffset и window.getSelection() не поддерживаются IE6/7, я полагаю.