除了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的开始和结束位置。
答案 0 :(得分:0)
IE 8和之前使用的自己的选择机制与标准不兼容。有关详细信息,请阅读MSDN上的selection object和TextRange 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: "" };
},