通过Javascript计算HTML中的开始和结束选择索引

通过Javascript计算HTML中的开始和结束选择索引,javascript,jquery,html,Javascript,Jquery,Html,如何在除IE以外的浏览器中获取contentEditable“div”中的开始和结束选择索引。例如,IE有以下方法 var oSelection; var oTxtRange; var units = -100000; var iStartIndex = -1, iEndIndex = -1; if(document.selection) // IE.. { oSelection = document.selection; oTxtRange = oSelection.cre

如何在除IE以外的浏览器中获取contentEditable“div”中的开始和结束选择索引。例如,IE有以下方法

var oSelection;
var oTxtRange;
var units = -100000;
var iStartIndex = -1, iEndIndex = -1;

if(document.selection)      // IE..
{
  oSelection = document.selection;
  oTxtRange = oSelection.createRange();

  if(oTxtRange)
  {
    iStartIndex = oTxtRange.moveStart('character',units);
    iEndIndex = oTxtRange.moveEnd('character',units);
    iStartIndex *= -1;
    iEndIndex *= -1;
  }
}
我知道上述方法不是W3C标准。我已经阅读了W3C文档中的Selection和Range对象,但仍然无法帮助找到Chrome和FireFox的解决方案。JQuery中的解决方案也是受欢迎的


提前感谢:-

您可以在非IE浏览器中执行以下操作。它像IE版本一样返回页面可见正文文本中选择边界的偏移量,但我不确定这些数字的用途

function getBodyTextOffset(node, offset) {
    var sel = window.getSelection();
    var range = document.createRange();
    range.selectNodeContents(document.body);
    range.setEnd(node, offset);
    sel.removeAllRanges();
    sel.addRange(range);
    return sel.toString().length;
}

function getSelectionOffsets() {
    var sel, range;
    var start = 0, end = 0;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(sel.rangeCount - 1);
            start = getBodyTextOffset(range.startContainer, range.startOffset);
            end = getBodyTextOffset(range.endContainer, range.endOffset);
            sel.removeAllRanges();
            sel.addRange(range);
            alert(start + ", " + end);
        }
    } else if (document.selection) {
        // IE stuff here
    }
    return {
        start: start,
        end: end
    };
}

看看这里,也许会有帮助:你为什么需要这个?你从中得到的数字有什么用?法布里克:这与所问的问题无关。嗨,蒂姆,你的解决方案有效。伟大的关于我使用它的场景是这样的。假设,您将内容设置为可编辑,并且希望允许用户在特定位置键入,比如在Hello元素之间。此时,请确保键入时所选内容位于该元素内。非常感谢-