[英]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.