在可编辑的div IE8中获取插入位置

时间:2015-01-25 20:12:18

标签: javascript json

除了IE8之外,我可以在所有浏览器的可编辑div中获取所选数据。

有人可以帮助我

这就是我现在所拥有的

get_selection: function () {
        var range;
        var bookmark;
        var length = this._displayText().length;
        if (window.getSelection) {
            range = window.getSelection().getRangeAt(0);
            if (range.commonAncestorContainer.parentNode == this._display) {
                return { start: range.startOffset, end: range.endOffset, text: this._displayText().substr(range.startOffset, range.endOffset - range.startOffset) };
            }
        }
        else if (document.selection) {
//solution for IE8 and lower
        }
        return { start: 0, end: 0, text: "" };
    },

this._display是我的可编辑div元素。 this._displayText()将从我的display元素返回textContent。我为此做了一个独立的功能,因为在IE8中不支持textcontent,我在IE8中使用innerText。

我已经尝试了一些我在google上找到的解决方案,但是没有任何东西给我了carret的开始和结束位置。

2 个答案:

答案 0 :(得分:0)

IE 8和之前使用的自己的选择机制与标准不兼容。有关详细信息,请阅读MSDN上的selection objectTextRange object

要获得所选范围,请使用以下代码:

var Rng = document.selection.createRange();

如果使用Rng.text,使用Rng.getClientRects()等选定区域的屏幕坐标等,您可以获取所选文本

答案 1 :(得分:0)

确定。这是我刚刚发现的解决方案,它完美无缺。我发布它以帮助其他需要它的人。

get_selection: function () {
        var range;
        var preRange;
        if (window.getSelection) {
            range = window.getSelection().getRangeAt(0);
            if (range.commonAncestorContainer.parentNode == this._display) {
                return { start: range.startOffset, end: range.endOffset, text: range.toString() };
            }
        }
        else if (document.selection) {
            range = document.selection.createRange();
            preRange = document.body.createTextRange();
            preRange.moveToElementText(this._display);
            preRange.setEndPoint("EndToStart", range);
            return { start: preRange.text.length, end: preRange.text.length + range.text.length, text: range.text };
        }
        return { start: 0, end: 0, text: "" };
    },