计算所选文本javascript/JQuery的位置?

Man*_*ani 3 html javascript tags jquery selection

如何通过计算身体标签后的立即偏移来检索所选文本的位置?

例如,考虑以下html,

<body> <div>hi</div> <div>dude!</div> </body>
Run Code Online (Sandbox Code Playgroud)

从"i"(在hi)到"du"(在花花公子)中选择时,我需要将2作为起始位置并将4作为结束位置.

注意:忽略标记元素.

Javascript更可取!

Tim*_*own 14

这里有一些简单,天真的代码,可以很好地完成你的用例.它没有考虑到可能不可见的任何文本(通过CSS或者是内部的或元素,例如),并可能有浏览器不符(IE与其他一切)换行,并没有考虑倒塌空白(例如,2个或更多连续的空格字符折叠到页面上的一个可见空间).但是,它适用于所有主流浏览器中的示例.

现场演示:http://jsfiddle.net/UuDpL/2/

码:

function getSelectionCharOffsetsWithin(element) {
    var start = 0, end = 0;
    var sel, range, priorRange;
    if (typeof window.getSelection != "undefined") {
        range = window.getSelection().getRangeAt(0);
        priorRange = range.cloneRange();
        priorRange.selectNodeContents(element);
        priorRange.setEnd(range.startContainer, range.startOffset);
        start = priorRange.toString().length;
        end = start + range.toString().length;
    } else if (typeof document.selection != "undefined" &&
            (sel = document.selection).type != "Control") {
        range = sel.createRange();
        priorRange = document.body.createTextRange();
        priorRange.moveToElementText(element);
        priorRange.setEndPoint("EndToStart", range);
        start = priorRange.text.length;
        end = start + range.text.length;
    }
    return {
        start: start,
        end: end
    };
}

alert( getSelectionCharOffsetsWithin(document.body).start );
Run Code Online (Sandbox Code Playgroud)