使用javascript获取选择的开始和结束

时间:2015-12-27 14:51:39

标签: javascript selection getselection

我有一个像这样的html字符串:

<div id="div">Hi how are<span>you?</span> Fine</div>

文字将显示为"Hi how are you? Fine"

我想使用鼠标选择字符串的一部分并获取开头和结尾 从全文字符串看的选择。

例如,如果我选择“你”,我想获得start = 11和end = 14;

如果我选择“你是吗?”,我想获得start = 7和end = 15.

我写这篇文章是为了获得选择:

function getSel() {
            console.log(navigator.appCodeName);
            if (window.getSelection) {
                return window.getSelection();
            } else if (document.getSelection) {
                return document.getSelection();
            } else if (document.selection) {
                return document.selection.createRange().text;
            }
        }

这段代码获取开始和结束,但它不起作用:

$("#div").on('mouseup', function(e){
            var text=getSel();
            if(text.anchorNode === text.focusNode){
                var n = {  
                    node: text.anchorNode.parentNode.id,
                    start: text.anchorOffset,
                    end: text.focusOffset
                }
                //selection from right to left
                if(n.start>=n.end) {  
                    var tmp;
                    tmp=n.start;
                    n.start=n.end;
                    n.end=tmp;
                }
            }
            else    console.log("error in selection");          
});

1 个答案:

答案 0 :(得分:0)

你的选择器错了。 $('#div')实际上会选择包含id='div'的任何元素。

我已经举例说明了它是如何完成的。如果我没弄错你想要实现的目标。

function getSelectionText() {
    var text = "";
    if (window.getSelection) {
        text = window.getSelection().toString();
    } else if (document.selection && document.selection.type != "Control") {
        text = document.selection.createRange().text;
    }
    return text;
}

$(function(){
  $("#div").on('mouseup', function(e){
    var thisText = $(this).text();
    var selectedText = getSelectionText();
    var start = thisText.indexOf(selectedText);
    var end = start + selectedText.length;
    if (start >= 0 && end >= 0){
        console.log("start: " + start);
        console.log("end: " + end);
    }
  });
});

<强> Fiddle