IE选择和范围问题

时间:2008-10-20 10:55:04

标签: javascript internet-explorer selection-object

我正在尝试获取选择的start元素和end元素以及每个选择的偏移量,我在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 个答案:

答案 0 :(得分:4)

document.selection。

然而,IE返回的TextRange对象与Firefox / WebKit / W3不匹配,确定起点和终点的确切位置非常令人沮丧。根据您使用范围的具体操作,您可以使用range.parentElement(),range.inRange()或range.compareEndPoints()获得某些内容。对于富文本编辑器,您通常会使用令人毛骨悚然的range.execCommand()接口。

IE Range实现与Mozilla / Webkit / W3模型有点奇怪和不同,你通常会得到完全不同的代码路径,以便在两者之间进行选择。

答案 1 :(得分:1)

您应该查看IE BOM的ControlRangeTextRange个对象。

我相信IE6 / 7不支持AnchorOffset,focusOffset和window.getSelection()。

答案 2 :(得分:1)

如果您知道选择所在的对象(例如,它是用户输入的输入字段,您想要在键入时更改),此代码可以解决问题:

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();
    }
}