转换为每个元素获取endOffset

时间:2016-09-12 00:33:06

标签: javascript

我使用Tim(rangy库)的函数(最后)来获取段落的开始和结束偏移量,问题是它只将TOTAL字符作为结尾

示例:

<p id="p1">testing 1</p>
<p id="p2">testing 2</p>
<p id="p3">testing 3</p>

选择测试(从p1开始),它正确返回0,4(开始,结束)

如果我从p2中选择testing 1testing并使用:

getSelectionCharacterOffsetWithin(#p1); //0,16
getSelectionCharacterOffsetWithin(#p2); //0,16

如何设置它以捕获给定元素的结束偏移量?有没有办法做到这一点? 我知道它的设置以这个函数结束:end = preCaretRange.toString().length;作为选定的文本大小,但是如何限制给定的元素?

以下功能:

function getSelectionCharacterOffsetWithin(element) {
    start = 0;
    end = 0;
    doc = element.ownerDocument || element.document;
    win = doc.defaultView || doc.parentWindow;
    if (typeof win.getSelection != "undefined") {
        sel = win.getSelection();
        if (sel.rangeCount > 0) {
            range = win.getSelection().getRangeAt(0);
            preCaretRange = range.cloneRange();
            preCaretRange.selectNodeContents(element);
            preCaretRange.setEnd(range.startContainer, range.startOffset);
            start = preCaretRange.toString().length;
            preCaretRange.setEnd(range.endContainer, range.endOffset);
            end = preCaretRange.toString().length;
        }
    }
    return { start: start, end: end };

0 个答案:

没有答案