Проблема с выбором и диапазоном 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, я полагаю.

Другие вопросы по тегам