簡體   English   中英

在可編輯div IE8中獲得插入符位置

[英]Get caret position in editable div IE8

我有辦法在除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: "" };
    },

這是我的可編輯div元素。 this._displayText()將從我的顯示元素返回textContent。 我為此做了一個單獨的功能,因為IE8不支持textcontent,並且我將innerText用於IE8。

我已經嘗試過一些在Google上找到的解決方案,但是沒有任何結果可以使我了解Carret的開始和結束位置。

IE 8和以前版本使用了自己的與標准不兼容的選擇機制。 有關更多信息,請閱讀MSDN上的選擇對象TextRange對象

要獲得所選范圍,請使用以下代碼:

var Rng = document.selection.createRange();

比起使用Rng.text可以獲得選定的文本,使用Rng.getClientRects()來獲得選定區域的屏幕坐標等。

好。 這是我剛剛發現的完美解決方案。 我發布它以幫助需要它的其他人。

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: "" };
    },

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM