我正在尝试获取选择的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中做到这一点,任何人都能指出我正确的方向?
答案 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的ControlRange和TextRange个对象。
我相信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();
}
}