Проблема с выбором и диапазоном IE - PullRequest
2 голосов
/ 20 октября 2008

Я пытаюсь получить начальный элемент и конечный элемент выделения и смещение выделения в каждом, я делаю это в 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 ]

4 голосов
/ 20 октября 2008

document.selection.

Однако объект TextRange, возвращаемый IE, не соответствует Firefox / WebKit / W3, и определение точных положений начальной и конечной точек очень расстраивает. В зависимости от того, что именно вы делаете с диапазоном, вы можете получить что-то с помощью range.parentElement (), range.inRange () или range.compareEndPoints (). Для текстовых редакторов вы обычно используете потрясающе уродливый интерфейс range.execCommand ().

Реализация IE Range настолько странна и отличается от модели Mozilla / Webkit / W3, что вы обычно получаете совершенно разные пути кода для всего, что связано с выбором между ними.

1 голос
/ 22 декабря 2009

Если вы знаете объект, в котором находится выделение (например, это поле ввода, которое пользователь вводит, и которое вы хотите изменить во время ввода), этот код выполняет свою задачу:

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();
    }
}
1 голос
/ 20 октября 2008

Вы должны посмотреть на объекты ControlRange и TextRange спецификации IE.

AnchorOffset, focusOffset и window.getSelection () не поддерживаются IE6 / 7, я полагаю.

...