Calculate Position of selected text javascript/JQuery?

前端 未结 2 794
北海茫月
北海茫月 2020-11-30 07:30

How to retrieve the position of selected text by calculating it\'s offset immediate after body tag?

For Example consider the following html,



        
相关标签:
2条回答
  • 2020-11-30 07:33

    Use following java script function for Highlighting the html page..

    function stylizeHighlightedString() 
    {
        var range               = window.getSelection().getRangeAt(0);
        var selectionContents   = range.extractContents();
        var span                = document.createElement("span");
        span.appendChild(selectionContents);
        span.setAttribute("class","uiWebviewHighlight");
    
        span.style.backgroundColor  = "red";
        span.style.color            = "white";
    
        range.insertNode(span);
    }
    
    0 讨论(0)
  • 2020-11-30 07:53

    Here's some simple, naive code to do this that may well do the job for your use case. It does not take into account any text that may be made invisible (either by CSS or by being inside a or element, for example) and may have browser discrepancies (IE versus everything else) with line breaks, and takes no account of collapsed whitespace (such as 2 or more consecutive space characters collapsing to one visible space on the page). However, it does work for your example in all major browsers.

    Live demo: http://jsfiddle.net/UuDpL/2/

    Code:

    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 );
    
    0 讨论(0)
提交回复
热议问题